14
类型测试什么时候可以?
假设一种语言具有某种固有的类型安全性(例如,不是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之外的类型的需求。
53
type-systems