我已经阅读了各种文章,但我仍然不知道为什么不应该使用instanceof.kindlylet我知道你的想法。
答案 0 :(得分:15)
我发现需要在糟糕的设计中使用instanceof提示。这是一个肯定的迹象,一个大而复杂的开关式结构将随之而来。在我看到它使用的大多数时候,我们应该使用多态而不是instanceof。请参阅策略模式。 (relevant examples of use)
我发现我需要使用它的唯一时间是实施equals(Object o)
。
答案 1 :(得分:4)
从基类型转换为派生类型是一件坏事。如果你以这种方式使用instandof,它被认为是糟糕的设计,因为难以维护和阅读。请参阅http://www.javapractices.com/topic/TopicAction.do?Id=31。
将instanceof
用于equals(),因为您的object
应该是您的类型,这是一种很好的做法。
答案 2 :(得分:4)
一个好的用例是检查RandomAccess等标记接口。
答案 3 :(得分:0)
当你知道传递的对象时,你不需要使用它。如果涉及任何歧义(比如实现相同接口的两个类),则建议在继续进行之前使用instanceof
。
答案 4 :(得分:0)
当需要覆盖Object的equals方法时,使用instanceof,如果它们属于不同类型,则视为两个对象不能相等。我很少遇到需要instanceof的另一种情况 - 也许如果需要向下转换但可能抛出ClassCastException。