12
votes

Comment déterminer si une classe Java implémente une interface particulière

J'essaie d'utiliser la réflexion pour déterminer si une classe transcédée implémente un ISWDIDGET interface: xxx

est la meilleure / la plus efficace de déterminer cela? Je vois aussi un iswidget.class.isAssignAindfrom (Class ) Méthode ...


0 commentaires

4 Réponses :


1
votes

1) Cela ne fait aucun sens xxx pré>

essayez-le avec n'importe quelle classe p> xxx pré>

vous obtiendrez p>

true


0 commentaires

14
votes

J'utiliserais le iSAssignAdFrom méthode pour déterminer si iswidget est un superinterface: xxx

pour citer le javadoc ci-dessus:

détermine si la classe ou l'interface représentée par cet objet de classe est la même chose que, soit une superclasse ou une superinterface de, la Classe ou interface représentée par le paramètre de classe spécifié.


0 commentaires

0
votes

Si cela fonctionne, ça devrait aller bien. Vous pouvez également essayer d'appeler la méthode Cast de la classe Classe ESSAYEZ et CATCHEZ.


1 commentaires

Cela fonctionne, mais cela abuse vraiment du point d'utiliser un bloc d'essai / prise. De plus, l'exception lancée rendra l'appel plus cher qu'il ne doit être (bien que je ne sois pas sûr à quel point il serait plus efficace d'utiliser la réflexion pour déterminer l'interface de mise en œuvre)



1
votes

Vous pouvez utiliser la méthode getinterfaces () code> si vous avez un objet code> class code>. xxx pré>

La méthode getinterfaces vous donne un Array de classe code> représentant les interfaces code>. Ou vous pouvez également utiliser la méthode ISAssignAdFrom comme suit: P>

IsWidget.class.isAssignableFrom(clzz);


2 commentaires

Cela déterminera si CLZZ est une superclasse de iswidget ; C'est en arrière.


@RGETTMAN: corrigé. Merci de notifier. :)