dimanche 14 octobre 2018

Generic class type parent using reflection

public class Parent {}

public class A extends Parent {}

public class B {}

public class Test {
    private List<A> aList;
    private List<B> bList;
}

I was playing around with reflection and generics and created these classes just for fun.

Now I want to print the names of variables in the Test class which are of type List<T extends Parent>. So I want to print only "aList" because A extends Parent, while B does not.

So far I have been able to get the List variables. I looked at various methods of reflection but could not extract the type of List <...> and see if its superclass is Parent or not. Here is my code which currently prints both "aList" and "bList":-

public static void main(String[] args) {
    Arrays.stream(Test.class.getDeclaredFields())
            .filter(field -> field.getType().equals(List.class)) // && fieldActualTypeExtendsA
            .forEach(field -> System.out.println(field.getName()));
}

What should I add in the filter?





Aucun commentaire:

Enregistrer un commentaire