Как использовать библиотеку отражений для получения подтипа подтипа

Вот мой сценарий, у меня есть три класса:

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;
}
Другие вопросы по тегам