51 votes

Vérifier qu'un type de classe (.class) est égal à un autre type de classe

Le code suivant est-il valide ?

 void myMethod (Class classType) {
   if (classType == MyClass.class) {
       // do something
   }
}

myMethod (OtherClass.class);

Sinon, existe-t-il une autre approche où je peux vérifier si un .class passé (Type de classe) est de type - MyClass ?

5voto

Slash Points 486

Je préfère comparer les noms canoniques pour être complètement sûr, classType.getCanonicalName().equals(MyClass.class.getCanonicalName()).

Notez que cela peut entraîner des problèmes avec les classes anonymes et internes, si vous les utilisez, vous pouvez envisager d'utiliser getName à la place.

2voto

Vadim Gulyakin Points 663

Cela a fonctionné pour moi:

 public class Test {

    void myMethod(Class classType) {
        System.out.println(classType.isAssignableFrom(Test.class));
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.myMethod(String.class);
    }

}

1voto

alex Points 1434

Je pense que vous recherchez instanceof .

 Animal a = new Tiger();
System.out.println(a instanceof Tiger); // true
System.out.println(a instanceof Animal); //true

Alternativement, vous pouvez comparer deux classes avec

 a.getClass() == b.getClass()

0voto

hansSolo Points 61

Ne pas utiliser classType.getCanonicalName().equals(MyClass.class.getCanonicalName()) ce qui précède ne prendra pas en compte les génériques (toutes les cartes sont les mêmes, tous les ensembles sont les mêmes, etc.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X