Как найти все (дочерние) подчиненные интерфейсы определенного интерфейса в Java?
Учитывая интерфейс:
public interface A {};
с наследующими интерфейсами:
public interface B extends A {}
public interface C extends A {}
Как я могу программно сканировать, чтобы найти B
а также C
? Т.е. как это сделать:
Type[] types = findAllSubInterfacesOfA(); // Returns [B.class, C.class]
Примечание: я пытаюсь найти здесь интерфейсы, а не классы или экземпляры.
1 ответ
Решение
Следующий фрагмент должен сделать это.
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 {
}
выход
subInterface: sub.optimal.reflections.B
subInterface: sub.optimal.reflections.C