有一个需求,就是通过反射判断一个类的属性的数据类型是否为String
类型,本来挺简单的但是却弄了半天,原因是我在type.isPrimitive()
方法后去判断的:
Class<Person> personClass = Person.class;
Field[] declaredFields = personClass.getDeclaredFields();
for (Field field : declaredFields) {
try {
//获取值 是否是基本类型
Class<?> type = field.getType();
if (type.isPrimitive()) {
if (String.class == type) {
System.out.println("type = String");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
这样是无法正确判断,但是如果在isPrimitive()
方法外就可以了,具体的原因没有找到,isPrimitive()
是一个本地方法也看不到源码 = =,只能先记录下来,下面这段代码是可以正确判断的:
Class<Person> personClass = Person.class;
Field[] declaredFields = personClass.getDeclaredFields();
for (Field field : declaredFields) {
try {
//获取值 是否是基本类型
Class<?> type = field.getType();
if (String.class == type) {
System.out.println("type = String");
}
}catch(Exception e){
e.printStackTrace();
}
}
网友评论