- 问题
已知对象有属性是集合类型,如何获取该集合的泛型? - 方法
@Data
@AllArgsConstructor
public class ResultObj {
private Integer id;
private List<Student> stu;
}
@Data
@AllArgsConstructor
public class Student {
private String name;
private Integer age;
}
public static void main(String[] args) {
Student s1 = new Student("zs",10);
Student s2 = new Student("ls",12);
List<Student> list = Stream.of(s1, s2).collect(Collectors.toList());
ResultObj obj = new ResultObj(1,list);
Type type = getType(obj);
System.out.println(type);
}
@SneakyThrows
public static Type getType(Object o){
Class<?> aClass = o.getClass();
Field field = aClass.getDeclaredField("stu");
Type type = field.getGenericType();
if(type instanceof ParameterizedType){
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
if(actualTypeArguments.length > 1){
throw new RuntimeException("集合元素类型不一致");
}
for(Type actualType : actualTypeArguments){
return actualType;
}
}
return null;
}