Как использовать библиотеку отражений для получения подтипа подтипа
Вот мой сценарий, у меня есть три класса:
public abstract class A {
public Set<Class<?>> getGrandChildren() {
Reflections reflections = new Reflections(this.getClass().getPackage().getName());
Set<Class<?>> grandChildren = reflections.getSubTypesOf(this.getClass());
return grandChildren;
}
}
public class B extends A {}
public class C extends B implements X {}
class D {
public B client = new B();
//I am trying to get all children of this class
client.getGrandChildren()
}
Мой компилятор жалуется на тип:
Set<Class<?>> grandChilderen = reflections.getSubTypesOf(this.getClass());
Как мне это сделать?
1 ответ
Решение
Самый простой способ - это положиться на raw type
так как он терпит неудачу, потому что он ожидает значение для параметризованного типа (соответствующий T
в подписи public <T> Set<Class<? extends T>> getSubTypesOf(Class<T> type)
) который вы не можете предоставить здесь, так как это общий метод
public Set<Class<?>> getGrandChildren() {
Reflections reflections = new Reflections(this.getClass().getPackage().getName());
Set grandChildren = reflections.getSubTypesOf(this.getClass());
return grandChildren;
}