100 votes

Pourquoi une variable « Class » ne peut-elle pas être transmise à instanceof ?

Pourquoi ce code ne se compile pas ?

    public boolean isOf(Class clazz, Object obj){
        if(obj instanceof clazz){
            return true;
        }else{
            return false;
        }
    }

Pourquoi je ne peux pas passer une variable de classe instanceof ?

142voto

Robert Munteanu Points 31558

L'opérateur instanceof travaille sur des types de référence, comme Integer, et non sur des objets, comme new Integer(213). Vous voulez probablement quelque chose comme

clazz.isInstance(obj)

Note : votre code sera plus concis si vous écrivez

public boolean isOf(Class clazz, Object obj){
    return clazz.isInstance(obj)
}

Je ne sais pas vraiment si vous avez besoin d'une méthode.

16voto

Eyal Schneider Points 11399

instanceof ne peut être utilisé qu'avec des noms de classe explicites (indiqués au moment de la compilation). Pour effectuer un contrôle d'exécution, vous devez faire :

clazz.isInstance(obj)

Cela a un petit avantage sur clazz.isAssignableFrom(..) puisqu' il traite le cas obj == null mieux.

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