获取类的所有(派生)接口

时间:2011-07-07 19:33:06

标签: java reflection

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 个答案:

答案 0 :(得分:45)

答案 1 :(得分:16)

番石榴溶液:

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

这是比古代Apache的功能更强大,更清晰的反射API。

答案 2 :(得分:2)

不要忘记, Spring Framework 有许多类似的API类,如Apache Commons Lang。所以有:org.springframework.util.ClassUtils#getAllInterfaces