java从基本接口获取所有扩展接口
是否有可能获得扩展基本接口的所有接口的列表,而无需在运行时用java实现任何接口 例如:java从基本接口获取所有扩展接口,java,reflection,interface,Java,Reflection,Interface,是否有可能获得扩展基本接口的所有接口的列表,而无需在运行时用java实现任何接口 例如: interface A {} interface B extends A{} interface C extends A{} interface D extends C{} public Class<? extends A>[] getAllInterfaces(A.class); 接口A{} 接口B扩展了{} 接口C扩展了{} 接口D扩展了C{} 公共课有点,但不是真的 您需要做的是枚举所
interface A {}
interface B extends A{}
interface C extends A{}
interface D extends C{}
public Class<? extends A>[] getAllInterfaces(A.class);
接口A{}
接口B扩展了{}
接口C扩展了{}
接口D扩展了C{}
公共课有点,但不是真的
您需要做的是枚举所有类型,并在其中找到属于接口的内容,并扩展您的接口。(使用Class#isInterface
和Class#getInterfaces
)
然而,真正的困难在于找到“所有类型”。这是否意味着JVM当前加载的所有类型?它是否意味着可以在当前类路径上找到所有类型?基本上可以从任何源加载类,因此扩展接口的理论接口集是无限的
顺便说一下,没有标准的方法来进行这些枚举。对于第一个变体,请参见以下线程:如果不需要使用纯反射进行扫描,则可以使用库进行扫描
检查同一类加载器上的子代接口的基本变量为:
public <T> Class<? extends T>[] getAllInterfaces(Class<T> clazz) {
Reflections reflections = new Reflections(clazz.getClassLoader());
return reflections.getSubTypesOf(clazz)
.stream()
.filter(subClass -> subClass.isInterface())
.toArray(Class[]::new);
}
公共类