J'essaie de faire l'équivalent de
if ( object1.class == object2.class )
{
//do something
}
qui bien sûr ne fonctionne pas, quelle méthode est-ce que je néglige?
S'ils sont de la même classe exacte:
boolean result = object1.getClass().equals( object2.getClass());
Maintenant, si ce sont des classes compatibles (si l'une est d'une classe descendante à l'autre):
HashMap<String,Object> hashMap = new HashMap<String,Object>();
LinkedHashMap<String,Object> linkedHashMap = new LinkedHashMap<String,Object>();
boolean result = hashMap.getClass().isAssignableFrom( linkedHashMap.getClass() );
Comme LinkedHashMap est une sous-classe de HashMap, cette variable result sera vraie, donc cela pourrait probablement être mieux pour vous car elle trouvera des correspondances exactes et de sous-classe.
En outre, vous devez éviter d'utiliser ".class" sur les variables, car cela pourrait ne pas vous donner le résultat correct, par exemple:
Object someText = "text value";
System.out.println( someText.class.getName() ); //this will print Java.lang.Object and not Java.lang.String
Lorsque vous utilisez ".class", vous accédez à la propriété statique variable et non à la classe de l'objet lui-même.
Vous manquez la méthode getClass()
,
if (object1.getClass().equals(object2.getClass()))
{
// do something
}
Vous pouvez utiliser ceci:
if (object1.getClass().equals(object2.getClass())) {
//do something
}
object1.getClass() == object2.getClass()
Vous recherchez la méthode getClass
, définie dans Java.lang.Class
.
(Source: http://download.Oracle.com/javase/7/docs/api/Java/lang/Class.html )