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{} 公共课有点,但不是真的 您需要做的是枚举所

是否有可能获得扩展基本接口的所有接口的列表,而无需在运行时用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{}

公共课有点,但不是真的

您需要做的是枚举所有类型,并在其中找到属于接口的内容,并扩展您的接口。(使用
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);
}
公共类