Ответ 1
Вы должны использовать isAssignableFrom
:
if (YourInterface.class.isAssignableFrom(clazz)) {
...
}
У меня есть объект 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);
}
}
Вы должны использовать isAssignableFrom
:
if (YourInterface.class.isAssignableFrom(clazz)) {
...
}
вы можете использовать следующую функцию, чтобы получить все реализованные интерфейсы
Class[] intfs = clazz.getInterfaces();
Вы можете использовать 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
}
}
Вы также можете установить экземпляр, добавляющий ".class"
Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
if(Interface.class.isAssignableFrom(clazz))
{
retVal.put(clazz.getSimpleName(), clazz);
}
}