2011-07-25 14 views

Odpowiedz

62

Jeśli są z dokładnym samej klasy:

boolean result = object1.getClass().equals(object2.getClass()); 

Teraz, jeśli są one zgodne klas (jeśli jest klasy zstępującej do drugiego) :

HashMap<String,Object> hashMap = new HashMap<String,Object>(); 
LinkedHashMap<String,Object> linkedHashMap = new LinkedHashMap<String,Object>(); 
boolean result = hashMap.getClass().isAssignableFrom(linkedHashMap.getClass()); 

Jak LinkedHashMap jest podklasą HashMap to wynik zmienna będzie prawdą, więc może to być dla ciebie lepsze, ponieważ znajdzie dokładnie i podklasę.

Ponadto, należy unikać „.class” o zmienne, ponieważ może to nie daje prawidłowy wynik, na przykład:

Object someText = "text value"; 
System.out.println(someText.class.getName()); //this will print java.lang.Object and not java.lang.String 

Kiedy używasz „.class” jesteś acessing zmienna właściwość statyczna, a nie klasa samego obiektu.

+0

Dziękujemy za informacje dotyczące porównywania wartości skrótu. To więcej niż chciałem zrobić dla tego konkretnego problemu, ale kompletność jest doceniana. – ToothlessRebel

+0

Dlaczego po prostu nie użyłbyś object1 objectof object2? – JPM

+0

** instanceof ** pobiera odwołanie do obiektu po lewej stronie i literałem nazwy klasy po prawej stronie, nie można go używać w sposób, w jaki mówisz. –

12

Brakuje metodę getClass(),

if (object1.getClass().equals(object2.getClass())) 
{ 
    // do something 
} 
3
object1.getClass() == object2.getClass() 
+0

Użyj słowa kluczowego instanceof –

+1

Żadne wystąpienie instanceof nie wymaga następującego podpisu: instancja instanceof ClassName i ClassName muszą być znane podczas kompilacji. Używanie getClass() pozwala na oczekiwanie, aż środowisko wykonawcze pozna klasę. Jest możliwe, że OP mógłby zamienić się na użycie instanceof, ale nie na informacje zawarte w pytaniu. Istnieją również inne różnice dotyczące polimorfizmu. – chubbsondubs

5

Można to wykorzystać:

if (object1.getClass().equals(object2.getClass())) { 
    //do something 
} 
3

trzeba użyć metody getClass().

try:

if(object1.getClass() == object2.getClass()) 
    //do something 
Powiązane problemy