Java 如何检查两个对象是否属于同一类?

Java 如何检查两个对象是否属于同一类?,java,Java,如果我有两个对象如下 ClassA classAInstance = ... ClassB classBInstance = ... 。。。其中ClassB是ClassA的直接子类(扩展),分配给“classAInstance”和“classBInstance”的实际对象可以是ClassA、ClassB或ClassA的直接或间接子类的实例 然后如何检查分配给“classAInstance”和“classBInstance”的对象是否属于同一类?以下是正确的 classAInstance.get

如果我有两个对象如下

ClassA classAInstance = ...
ClassB classBInstance = ...
。。。其中ClassB是ClassA的直接子类(扩展),分配给“classAInstance”和“classBInstance”的实际对象可以是ClassA、ClassB或ClassA的直接或间接子类的实例

然后如何检查分配给“classAInstance”和“classBInstance”的对象是否属于同一类?以下是正确的

classAInstance.getClass().equals(classBInstance.getClass());

。。。还是我应该比较的其他属性?

不,这就是方法……假设这是正确的做法。当然,与大多数反射一样,如果您希望对
ClassB
的层次结构如何工作进行重构,那么比较类是非常脆弱的。

不,这就是方法……假设这样做是正确的。当然,与大多数反射一样,如果您希望重构
ClassB
的层次结构的工作方式,那么比较类是非常脆弱的

classAInstance.getClass().equals(classBInstance.getClass())
这和

classAInstance.getClass() == classBInstance.getClass()
是的,这会起作用:

classAInstance.getClass().equals(classBInstance.getClass())
这和

classAInstance.getClass() == classBInstance.getClass()

请注意,如果您需要检查
ClassB
是否恰好是
ClassA
,您可能违反了或滥用了多态性。依赖于对象是ClassA的代码不应该关心它是否实际上是ClassB。否,我想检查分配给classAInstance的对象的类是否与分配给classBInstance的对象的类相同。这个问题有意义吗?上面的技术正确吗?我认为这个问题在很大程度上是有意义的,我的观点是,如果你需要做这个检查,你几乎肯定有一个糟糕的设计或类层次结构。有一些有效的方法可以检查确切的类型(例如,在
equals
实现中强制对称),但很少使用。注意。如果ClassB是ClassA的子类,那么您不能将ClassA的实例分配给ClassBinInstance。请注意,如果您需要检查
ClassB
是否恰好是
ClassA
,您可能违反了或滥用了多态性。依赖于对象是ClassA的代码不应该关心它是否实际上是ClassB。否,我想检查分配给classAInstance的对象的类是否与分配给classBInstance的对象的类相同。这个问题有意义吗?上面的技术正确吗?我认为这个问题在很大程度上是有意义的,我的观点是,如果你需要做这个检查,你几乎肯定有一个糟糕的设计或类层次结构。有一些有效的方法可以检查确切的类型(例如,在
equals
实现中强制对称),但很少使用。注意。如果ClassB是ClassA的子类,那么您不能将ClassA的实例分配给ClassBinInstance。