web-dev-qa-db-fra.com

Déterminez si deux objets Java sont de la même classe

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?

52
ToothlessRebel

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.

74
Maurício Linhares

Vous manquez la méthode getClass(),

if (object1.getClass().equals(object2.getClass())) 
{ 
    // do something 
}
14
Rich Adams

Vous pouvez utiliser ceci:

if (object1.getClass().equals(object2.getClass())) {
    //do something
}
6
user802421
object1.getClass() == object2.getClass()
4
chubbsondubs

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 )

4
Jetbeard