Class<?>
field#getType()
方法返回的是一个 Class<?>
对象,如果要确定 ? 的具体类型,需要按照以下的方法进行判断。区分方式从基本类型和对象两大块入手。
判断基本类型
下面的表达式以 Long 为例:
Long.TYPE == field.getType()
long 类型:
long.class.isAssignableFrom(field.getType())
判断对象(isAssignableFrom)
使用对象类的 isAssignableFrom
方法确定类型。
方法定义
确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是它们的超类或超接口。
如果是,它返回 true ; 否则返回 false。
如果此 Class 对象表示基本类型,则如果指定的 Class 参数恰好是此 Class 对象,则此方法返回 true,否则返回 false。
判断 Long 类型:
Long.class.isAssignableFrom(field.getType())
在这里,判断 Long 是否是 field.getType() ,或是 field.getType() 的超类或超接口。
判断String类型:
String.class.isAssignableFrom(field.getType())
示例代码:
public class StudentTest {
public static void main(String[] args) {
Class<Student> clazz = Student.class;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (Long.TYPE == field.getType() || Long.class.isAssignableFrom(field.getType())) {
System.out.println("this is long type:" + field.getName());
} else if (Integer.TYPE == field.getType()) {
System.out.println("this is int type");
} else if (String.class.isAssignableFrom(field.getType())) {
System.out.println("this is String type");
}
}
}
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
private static class Student {
private long score;
private int age;
private String username;
private Long size;
}
}
输出结果:
this is long type:score
this is int type
this is String type
this is long type:size