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

Получить все (производные) интерфейсы класса

java.lang.Class.getInterfaces возвращает все непосредственно реализованные интерфейсы, т.е. не проходит дерево классов, чтобы получить все интерфейсы всех родительских типов. Например, иерархия

public interface A {}
public interface B {}
public interface C extends B {}

public class Foo implements A {} // Foo.class.getInterfaces() returns [A]
public class Bar implements C {} // Bar.class.getInterfaces() returns [C], note B is not included.

Для Bar я хотел бы получить [B, C], но для любой произвольной глубины дерева.

Я мог бы написать это сам, но я уверен, что библиотека должна существовать, которая делает это уже, любые идеи?

4b9b3361

Ответ 2

Решение Guava:

final Set<TypeToken> tt = TypeToken.of(cls).getTypes().interfaces();

Это гораздо более мощный и понятный API, чем древний материал Apache.

Ответ 3

Не забывайте, что Spring Framework имеет много подобных классов использования, таких как Apache Commons Lang. Итак, есть: org.springframework.util.ClassUtils#getAllInterfaces