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

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], но для любой произвольной глубины дерева.

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

Ответ 2

Решение Guava:

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

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

Ответ 3

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