Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么时候应该和不应该';不能使用的实例?_Java - Fatal编程技术网

Java 什么时候应该和不应该';不能使用的实例?

Java 什么时候应该和不应该';不能使用的实例?,java,Java,我已经阅读了各种文章,但我仍然不知道为什么不应该使用instanceof。请告诉我您的想法。当您知道正在传递的对象时,您无需使用它。如果存在任何歧义(如两个类实现同一接口),建议在继续之前使用instanceof。从基类型转换为派生类型是一件坏事。如果您以这种方式使用InstantDof,它被认为是糟糕的设计,因为很难维护和读取。看 为equals()使用instanceof,因为您有一个应该是您的类型的对象,这是一个很好的做法。我发现需要使用instanceof提示来提示糟糕的设计。这是一个明

我已经阅读了各种文章,但我仍然不知道为什么不应该使用
instanceof
。请告诉我您的想法。

当您知道正在传递的对象时,您无需使用它。如果存在任何歧义(如两个类实现同一接口),建议在继续之前使用
instanceof

从基类型转换为派生类型是一件坏事。如果您以这种方式使用InstantDof,它被认为是糟糕的设计,因为很难维护和读取。看


为equals()使用
instanceof
,因为您有一个应该是您的类型的
对象,这是一个很好的做法。

我发现需要使用instanceof提示来提示糟糕的设计。这是一个明确的信号,一个大型的、复杂的交换机样式的构造将随之而来。在我看到它被使用的大多数时候,我们应该使用多态性而不是instanceof。参见战略模式。()


我发现我唯一需要使用它的时候是在实现
equals(Object o)

一个好的用例是检查标记接口,如。

在需要重写Object的equals方法时使用instanceof,因为如果两个对象的类型不同,它们就不能相等。我很少遇到另一种需要instanceof的情况——可能是需要向下转换,但可能会抛出ClassCastException。

实际上,策略是根据已知的条件(例如类型)决定应该做什么,但使用多态性在不同的代码分支上分派未知类型,使用的模式是IMO instanceof优于多态性是一种特殊情况,在这种情况下,一个方法仅在一个子类中有意义,并且父类和/或其他子类将被迫实现在其上下文中没有意义的存根方法。即使这样,也应该尝试从继承的方法调用特例方法,但如果这很麻烦,那么使用instanceof是完全合理的。