#java #reflection
#java #отражение
Вопрос:
У меня есть класс, который косвенно реализует интерфейс (его суперкласс или супер-пупер-класс могут реализовать реализации), и я хочу знать, реализует ли класс интерфейс или нет.
В терминах программирования :
import java.lang.reflect.Type;
class My implements MyName{
}
public class Tset extends My implements yourName{
public static void main(String[] args) {
Class[] allClassAndInterfaces = Tset.class.getInterfaces();
//but allClassAndInterfaces is not giving me the MyName Interface
//although it gives me YourName Interface
System.out.println(ArrayUtils.toString(lits));
}
}
Комментарии:
1. По сути, я хочу получить все прямые и косвенные интерфейсы, реализованные классом, а class.getInterfaces() не может этого сделать.
2. Нет ли какого-либо прямого api…
Ответ №1:
В классе Class есть определенный метод с именем IsAssignableFrom, который делает то, что вы хотите. В вашем случае это должно возвращать true:
MyName.class.isAssignableFrom(My.class);
Комментарии:
1. Могу ли я также получить список всех реализованных интерфейсов …. есть ли какой-либо такой метод
2. @Chandan: для этого вам нужно следовать иерархии классов (используйте Class.getSuperclass и Class.getInterfaces ).
Ответ №2:
Вы также можете использовать instanceof
, чтобы проверить, реализует ли (экземпляр) класса интерфейс или нет.
Редактировать:
interface X { }
class A implements X { }
System.out.println(new A() instanceof X); // <---- prints true
Комментарии:
1. Нет, у меня есть класс litrel, и он не входит в иерархию интерфейса, который я хочу проверить … для instaceof … необходима иерархия
2. Хорошо, я думал, у вас есть экземпляр.