получить все (производные) интерфейсы класса - PullRequest
37 голосов
/ 07 июля 2011

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

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

Ответы [ 3 ]

45 голосов
/ 07 июля 2011

Apache Commons Lang имеет метод, который вам нужен: ClassUtils.getAllInterfaces

16 голосов
/ 22 января 2016

Guava Решение:

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

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

2 голосов
/ 18 июля 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...