2012-03-12 109 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() 
相關問題