Отражение и интерфейсы

#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. Хорошо, я думал, у вас есть экземпляр.