162 votes

Tester si l’objet implémente l’interface

Cela a probablement été demandé avant, mais une recherche rapide seulement apporté la même question posée pour C#. Voir ici.

Ce qui en gros, je veux faire est de vérifier si un objet donné implémente une interface donnée.

J'ai un peu trouvé une solution mais ce n'est tout simplement pas suffisamment à l'aise pour l'utiliser fréquemment dans si ou cas déclarations et je me demandais si Java n'a pas intégré dans la solution.

public static Boolean implementsInterface(Object object, Class interf){
    for (Class c : object.getClass().getInterfaces()) {
        if (c.equals(interf)) {
            return true;
        }
    }
    return false;
}


EDIT: Ok, merci pour vos réponses. En particulier à Damien Pollet et le Noldorin, tu m'as fait repenser à mon dessin donc je n'ai pas fait de test pour des interfaces plus.

203voto

dfa Points 54490

aussi la instanceof opérateur fait le travail, dans un NPE de façon sécuritaire. Par exemple:

 if ("" instanceof java.io.Serializable) {
     // it's true
 }

les rendements vrai. Depuis:

 if (null instanceof AnyType) {
     // never reached
 }

les rendements faux, l'opérateur instanceof est nulle en sécurité (le code que vous avez posté n'est pas).

instanceof est intégré, au moment de la compilation alternative sûre à la Classe#isInstance(Objet)

43voto

Luke Woodward Points 20417

Cela devrait le faire :

Par exemple,

prend la valeur `` .

9voto

Steve Kuo Points 15196

Je préfère `` :

qui est beaucoup plus fréquent et lisible que``

5voto

Andreas Petersson Points 8096
C'était facile.

3voto

Rafa Points 877

Si vous voulez tester pour les interfaces :

}

Clazz est une Interface et myType est un type que vous avez définies qui peut-être implémenter plusieurs interfaces. Avec ce code, vous obtenez uniquement les types qui implémentent une interface définie

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