我正在查看一些代码,其中大量使用了Java的instanceof
运算符。由于这是一个普遍性问题,所以我将忍住不详细讨论。 instanceof
让我想起了C++的dynamic cast,并且让我回想起很久以前读到的有关它的建议,即如果您认为需要使用它,那么您的模型可能存在问题。这仍然是传统智慧吗?它适用于Java的instanceof
吗?
我正在查看一些代码,其中大量使用了Java的instanceof
运算符。由于这是一个普遍性问题,所以我将忍住不详细讨论。 instanceof
让我想起了C++的dynamic cast,并且让我回想起很久以前读到的有关它的建议,即如果您认为需要使用它,那么您的模型可能存在问题。这仍然是传统智慧吗?它适用于Java的instanceof
吗?
是的,你走在正确的道路上。虽然 instanceof
在某些情况下确实有用,但其过度使用通常意味着你的类设计存在缺陷。
instanceOf
,我会认为你的信息流有缺陷。通常情况下,代码的任何给定部分都不应该需要询问它正在传递的类是什么。当然也有例外情况,而且相当多。InstanceOf 在某种程度上是一种反射功能,而反射始终需要小心使用。 - markusinstanceof
表示设计缺陷,那么这个答案就是不完整的。 - Daniel Hershcovichinstanceof
不符合面向对象的原则。这是毋庸置疑的。 - Giorgioinstanceof
关键字的数量。这样只有那些在编译时不知道的才需要检查。话虽如此,instanceof
并不像goto
一样会很大程度地混乱你的控制流(尽管如果你不小心的话,它确实会引入许多额外的变量)。instanceof
,但如果有很多的话,我会认为这是代码异味。关键是要想出更好的方法;如果可以的话,使用instanceof
可能是错误的。我不知道一个方案来判断是否对于通用情况使用是好还是坏。在instanceof
之后的强制转换可能比关键字本身更具破坏性。(getClass() == o.getClass())
。只有在您真正需要支持所有“相等”的多个类型时才使用 instanceof。 - jtahlborn