Подтвердить что ты не робот

Определить, реализует ли класс интерфейс в Java

У меня есть объект Class. Я хочу определить, реализует ли тип, который представляет объект Class, определенный интерфейс. Мне было интересно, как это может быть достигнуто?

У меня есть следующий код. В основном, он делает массив всех классов в указанном пакете. Затем я хочу пройти через массив и добавить объекты класса, которые реализуют интерфейс для моей карты. Проблема заключается в том, что isInstance() принимает объект в качестве параметра. Я не могу создать интерфейс. Поэтому я как бы не понимаю этого. Любые идеи?

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);
    }
}
4b9b3361

Ответ 1

Вы должны использовать isAssignableFrom:

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

Ответ 2

вы можете использовать следующую функцию, чтобы получить все реализованные интерфейсы

Class[] intfs = clazz.getInterfaces();

Ответ 3

Вы можете использовать class.getInterfaces(), а затем проверить, есть ли там класс интерфейса.

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
    }
}

Ответ 4

Вы также можете установить экземпляр, добавляющий ".class"

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