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:scorethis is int typethis is String typethis is long type:size
