2012-03-12 133 views
1

如果我有两个目的如下...如何检查两个对象是否属于同一个类?

ClassA classAInstance = ... 
ClassB classBInstance = ... 

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

然后,我该如何检查分配给'classAInstance'和'classBInstance'的每个对象是否具有相同的Class?下面是正确的...

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

...或者是我应该比较一些其他属性?

+1

刚一说明,如果你需要检查是否ClassB''是** **正是'ClassA'你很可能违反了[Liskov Substitution Principle](http://en.wikipedia.org/wiki/Liskov_Substitution_Principle)或滥用多态性。依赖于一个对象是'ClassA'的代码不应该关心它是否实际上是'ClassB'。 – 2012-03-12 18:00:13

+0

不,我想检查分配给'classAInstance'的对象的类是否与分配给'classBInstance'的对象的类相同。问题有意义吗?该技术是否正确? – 2012-03-12 18:03:03

+1

我认为这个问题在很大程度上是有道理的,我的观点是,如果你需要这样做,你几乎可以肯定有一个糟糕的设计或类层次结构。有一些有效的用途来检查确切的类型(例如,在“equals”实现中强制对称),但它们很少见。 – 2012-03-12 18:03:39

回答

6

不,这就是做这件事的方法......假设这是正确的做法。当然,正如大多数反思一样,如果您希望对ClassB的层次结构进行重构,那么比较类就相当脆弱。

0

是的,这会工作:

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

这是一样的

classAInstance.getClass() == classBInstance.getClass() 
相关问题