Припустимо, що мова має певну безпеку типу (наприклад, не JavaScript):
З огляду на метод, який приймає a SuperType
, ми знаємо, що в більшості випадків, коли ми можемо спокуситися виконати тестування типу, щоб вибрати дію:
public void DoSomethingTo(SuperType o) {
if (o isa SubTypeA) {
o.doSomethingA()
} else {
o.doSomethingB();
}
}
Ми, як правило, повинні, якщо не завжди, створювати єдиний перезаписуваний метод на SuperType
і робити це:
public void DoSomethingTo(SuperType o) {
o.doSomething();
}
... де кожному підтипу надається власна doSomething()
реалізація. Решта нашого додатку може бути належним чином невідомим, чи є будь-яка дана SuperType
дійсність SubTypeA
чи є SubTypeB
.
Чудовий.
Але ми все ще надаємо is a
подібні операції у більшості, якщо не у всіх мовах, що захищають тип. І це говорить про потенційну потребу в явному тестуванні типу.
Отже, в яких ситуаціях, якщо такі є, ми повинні чи повинні проводити явне тестування типу?
Пробачте мою відсутність уваги чи відсутність творчості. Я знаю, що робив це раніше; але, чесно кажучи, так давно я не пам'ятаю, чи добре те, що я зробив! І в останній пам’яті, я не думаю, що я стикався з необхідністю тестувати типи поза моїм ковбойським JavaScript.