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);
}
}
Vous devriez utiliser isAssignableFrom
:
if (YourInterface.class.isAssignableFrom(clazz)) {
...
}
vous pouvez utiliser la fonction ci-dessous pour obtenir toutes les interfaces implémentées
Class[] intfs = clazz.getInterfaces();
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
}
}
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);
}
}