Io sto cercando di fare l'equivalente diDeterminare se due oggetti Java sono della stessa classe
if (object1.class == object2.class)
{
//do something
}
che ovviamente non funziona, quale metodo sto sottovalutando?
Io sto cercando di fare l'equivalente diDeterminare se due oggetti Java sono della stessa classe
if (object1.class == object2.class)
{
//do something
}
che ovviamente non funziona, quale metodo sto sottovalutando?
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.
Stai perdendo il metodo getClass()
,
if (object1.getClass().equals(object2.getClass()))
{
// do something
}
object1.getClass() == object2.getClass()
Utilizzare instanceof parola chiave –
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
È possibile utilizzare questo:
if (object1.getClass().equals(object2.getClass())) {
//do something
}
si deve utilizzare il metodo getClass()
.
prova:
if(object1.getClass() == object2.getClass())
//do something
Stai cercando il metodo di getClass
, definito in java.lang.Class
.
(Fonte: http://download.oracle.com/javase/7/docs/api/java/lang/Class.html)
Wow, questa domanda è stato preso d'assalto abbastanza rapidamente. – Jetbeard
Grazie per includere informazioni sul confronto valori hash. È più di quanto volessi fare per questo particolare problema, ma la completezza è apprezzata. – ToothlessRebel
perché non si basta usare object1 instanceof Object2? – JPM
** 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. –