如何在Java中找到特定接口的所有(子)子接口?

如何在Java中找到特定接口的所有(子)子接口?,java,spring,reflection,interface,reflections,Java,Spring,Reflection,Interface,Reflections,给定一个接口: public interface A {}; 使用继承接口: public interface B extends A {} public interface C extends A {} 如何以编程方式扫描以查找B和C?即如何做到这一点: Type[] types = findAllSubInterfacesOfA(); // Returns [B.class, C.class] 注意:我试图在这里找到接口,而不是类或实例。下面的代码片段应该可以做到这一点 public

给定一个接口:

public interface A {};
使用继承接口:

public interface B extends A {}

public interface C extends A {}
如何以编程方式扫描以查找
B
C
?即如何做到这一点:

Type[] types = findAllSubInterfacesOfA(); // Returns [B.class, C.class]

注意:我试图在这里找到接口,而不是类或实例。下面的代码片段应该可以做到这一点

public class FindSubinterfaces {

    public static void main(String[] args) {
        Class clazz = A.class;

        Reflections reflections = new Reflections(new ConfigurationBuilder()
                .setUrls(Arrays.asList(ClasspathHelper.forClass(clazz))));

        Set<Class<? extends List>> subTypes = reflections.getSubTypesOf(clazz);
        for (Class c : subTypes) {
            if (c.isInterface()) {
                System.out.println("subType: " + c.getCanonicalName());
            }
        }
    }
}

interface A {
};

interface B extends A {
}

interface C extends A {
}

class CA implements A {
}

abstract class DC implements C {
}

下面的代码段应该可以做到这一点

public class FindSubinterfaces {

    public static void main(String[] args) {
        Class clazz = A.class;

        Reflections reflections = new Reflections(new ConfigurationBuilder()
                .setUrls(Arrays.asList(ClasspathHelper.forClass(clazz))));

        Set<Class<? extends List>> subTypes = reflections.getSubTypesOf(clazz);
        for (Class c : subTypes) {
            if (c.isInterface()) {
                System.out.println("subType: " + c.getCanonicalName());
            }
        }
    }
}

interface A {
};

interface B extends A {
}

interface C extends A {
}

class CA implements A {
}

abstract class DC implements C {
}

您需要一种方法来检查类型是类还是接口。或者您需要一种方法来加载所有类型(类和接口),并逐个检查它们是否是扩展“a”的接口?我知道这并不完全是您所要求的,但它解决了您的问题吗@保罗:不幸的是,答案是错误的——它找到的是父接口,而不是子接口。@Davidorenzomarino是的,但希望这可能是以前的某个地方做过的(可能是Spring、Google Reflections或其他库…),您需要一种方法来检查类型是类还是接口。或者您需要一种方法来加载所有类型(类和接口),并逐个检查它们是否是扩展“a”的接口?我知道这并不完全是您所要求的,但它解决了您的问题吗@保罗:不幸的是,答案是错误的——它找到的是父接口,而不是子接口。@Davidorenzomarino是的,但希望这可能是以前的某个地方做过的(可能是Spring、Google Reflections或其他库…),很好,但当这不是直接扩展时,它似乎不起作用。i、 e:接口C扩展了B而不是A@Jos当然可以需求是找到给定接口的直接子接口。如果要查找实现给定接口的所有类/接口,则使用
子类型中提供的结果。很好,但如果这不是直接扩展,它似乎不起作用。i、 e:接口C扩展了B而不是A@Jos当然可以需求是找到给定接口的直接子接口。如果要查找实现给定接口的所有类/接口,请使用
子类型
中提供的结果。