如何在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当然可以需求是找到给定接口的直接子接口。如果要查找实现给定接口的所有类/接口,请使用子类型
中提供的结果。