web-dev-qa-db-fra.com

Déterminer si une classe implémente une interface dans Java

J'ai un objet Class. Je veux déterminer si le type représenté par l'objet Class implémente une interface spécifique. Je me demandais comment cela pourrait être réalisé?

J'ai le code suivant. Fondamentalement, il obtient un tableau de toutes les classes d'un package spécifié. Je souhaite ensuite parcourir le tableau et ajouter les objets Classe qui implémentent une interface sur ma carte. Le problème est que la isInstance() prend un objet en tant que paramètre. Je ne peux pas instancier une interface. Je suis donc un peu perdue avec cela. Des idées?

Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
    if(clazz.isInstance(/*Some object*/)) //Need something in this if statement
    {
        retVal.put(clazz.getSimpleName(), clazz);
    }
}
73
user489041

Vous devriez utiliser isAssignableFrom :

if (YourInterface.class.isAssignableFrom(clazz)) {
    ...
}
190
Flavio

vous pouvez utiliser la fonction ci-dessous pour obtenir toutes les interfaces implémentées

Class[] intfs = clazz.getInterfaces();
16
Ankur

Vous pouvez utiliser class.getInterfaces() puis vérifier si la classe d'interface est présente.

Class someInterface; // the interface you want to check for 
Class x; // 
Class[] interfaces = x.getInterfaces();

for (Class i : interfaces) {
    if (i.toString().equals(someInterface.toString()) {
        // if this is true, the class implements the interface you're looking for
    }
}
9

Vous pouvez également définir l'instance en ajoutant ".class"

Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
    if(Interface.class.isAssignableFrom(clazz))
    {
        retVal.put(clazz.getSimpleName(), clazz);
    }
}
2
Manu Navarro