最开始的版本忘记了接口的情况…
public class EEE {
public static void main(String[] args) {
List types = new ArrayList<>();
findAllTypes(DDD.class, types);
System.out.println(types);
}
private static void findAllTypes(Class> clazz, List types) {
Type genericSuperclass = clazz.getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
Collections.addAll(types, ((ParameterizedType) genericSuperclass).getActualTypeArguments());
}
Type[] genericInterfaces = clazz.getGenericInterfaces();
for (final Type genericInterface : genericInterfaces) {
if (genericInterface instanceof ParameterizedType) {
Collections.addAll(types, ((ParameterizedType) genericInterface).getActualTypeArguments());
}
}
Class> superclass = clazz.getSuperclass();
if (superclass != null) {
findAllTypes(superclass, types);
}
for (final Class> anInterface : clazz.getInterfaces()) {
findAllTypes(anInterface, types);
}
}
}