2011-07-25 18 views

risposta

62

Se sono dalla esatto stessa classe:

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

Ora, se sono compatibili classi (se uno è di una classe discendente verso l'altro) :

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

Come LinkedHashMap è una sottoclasse di HashMap questo risultato variabile sarà vero, quindi questo potrebbe probabilmente essere meglio per voi come sta andando per trovare esatta e corrispondenze sottoclasse.

Inoltre, si dovrebbe evitare di utilizzare ".class" sulle variabili, in quanto non si potrebbe dare il risultato corretto, ad esempio:

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

quando si utilizza ".class" si sta accedendo al proprietà statica variabile e non la classe dell'oggetto stesso.

+0

Grazie per includere informazioni sul confronto valori hash. È più di quanto volessi fare per questo particolare problema, ma la completezza è apprezzata. – ToothlessRebel

+0

perché non si basta usare object1 instanceof Object2? – JPM

+0

** instanceof ** prende un riferimento a un oggetto a sinistra e un nome di classe letterale a destra, non può essere usato nel modo in cui stai dicendo. –

12

Stai perdendo il metodo getClass(),

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

Utilizzare instanceof parola chiave –

+1

non richiede instanceof segue questa firma: esempio instanceof ClassName e NomeClasse deve essere noto al momento della compilazione. L'uso di getClass() consente di attendere fino al runtime per conoscere la classe. È possibile che l'OP possa convertire in instanceof, ma non dalle informazioni fornite nella domanda. Ci sono anche altre differenze rispetto al polimorfismo. – chubbsondubs

5

È possibile utilizzare questo:

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

si deve utilizzare il metodo getClass().

prova:

if(object1.getClass() == object2.getClass()) 
    //do something 
Problemi correlati