【发布时间】:2017-11-02 18:15:29
【问题描述】:
我们如何避免使用instanceof 操作符来编写干净的代码
比如说:
如果一个对象是 Type1 做某事,但如果它是 Type2 则做其他事情。
if(obj instanceof T1){
doSomething()
}else(obj instanceof T2){
doOtherThing()
}
【问题讨论】:
-
你知道是
instanceof,而不是instanceOf?您可以实现Chain of responsibility,其中链中的每个元素都执行一个instanceof操作并在合适的情况下使用该事件。也许您应该更详细地解释您要完成的工作,因为这似乎是XY problem -
这实际上取决于代码在做什么,您可以控制哪些类(与您无法抽象出接口的第三方库相反)等。不幸的是,问题是它的立场太宽泛了。答案通常会使用覆盖的方法,但具体情况各不相同。
-
我个人更喜欢
getClass()方法,说我正在实现的逻辑需要知道确切的类而不是任何超类 -
使用
instanceOf简单易读也不错。如果你想隐藏它并以更动态的方式使用,你可以使用visitor pattern -
@Turing85:这个问题被问到是为了理解 instanceof 操作符链是如何被认为是代码异味。
标签: java instanceof