Предполагая язык с некоторой присущей безопасности типов (например, не 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
является ли какое-либо данное на самом деле a SubTypeA
или a SubTypeB
.
Замечательный.
Но нам все еще дают is a
подобные операции в большинстве, если не во всех, типобезопасных языках. И это говорит о потенциальной необходимости явного тестирования типов.
Итак, в каких ситуациях, если таковые имеются, должны мы или должны мы выполняем явное тестирование типа?
Прости меня за рассеянность или недостаток творчества. Я знаю, что делал это раньше; но, честно говоря, это было так давно, я не могу вспомнить, было ли то, что я сделал, хорошо! И в последнее время я не думаю, что столкнулся с необходимостью тестировать типы вне моего ковбойского JavaScript.