假设一种语言具有某种固有的类型安全性(例如,不是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
使用大多数(即使不是全部)类型安全语言进行类似操作。这表明可能需要显式类型测试。
那么,在什么情况下(如果有的话)我们应该还是必须执行显式类型测试?
原谅我心不在or或缺乏创造力。我知道我以前做过;但是,老实说,很久以前,我不记得自己做的是否好!在最近的记忆中,我认为我没有遇到过需要测试我的牛仔JavaScript之外的类型的需求。