public class Parent {}
public class A extends Parent {}
public class B {}
public class Test {
private List<A> aList;
private List<B> bList;
}
Я играл с отражением и обобщениями и создал эти классы просто для удовольствия.
Теперь я хочу напечатать имена переменных в классе Test
, которые имеют тип List<T extends Parent>
,Поэтому я хочу печатать только "aList"
, потому что A
расширяет Parent
, а B
- нет.
До сих пор мне удавалось получить переменные List
.Я посмотрел на различные методы отражения, но не смог извлечь тип List <...>
и посмотреть, является ли его суперкласс Parent
или нет.Вот мой код, который в настоящее время печатает как "aList"
, так и "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()));
}
Что мне добавить в фильтр?