朋友给我说了这个问题,第一反应是a.xx==null。
朋友给我说错了,应该用反射,于是我总结了一下为什么要用反射。
我认为有两点:1.你不知道这个对象是什么类型,如果是int类型,而int类型又不能用 ==null来判断。
2.这个对象内的属性是私有呢,你就通过a.xx拿不到这个属性了。
上代码:
一个user对象
public class User {
private String a;
private int b;
}
一个测试类:
public class Test {
public static void main(String[] args) throws Exception {
User user=new User();
Test test =new Test();
System.out.println(test.checkObjFieldIsNull(user,"a"));
}
public boolean checkObjFieldIsNull(Object obj,String fieldName) throws Exception {
boolean flag = false;
//获取一个私有的属性
Field f = obj.getClass().getDeclaredField(fieldName);
System.out.println(f);
//将私有属性公开
f.setAccessible(true);
//获取对象内该属性的值
if(f.get(obj) == null){
flag = true;
return flag;
}
return flag;
}
}
测试:传入a
private java.lang.String com.y20.chuan.test.classshuxing.User.a
true
测试:传入b
private int com.y20.chuan.test.classshuxing.User.b
false
解释一下为什么int类型不为空。
在Java程序开发中,在自定义自己的类的时候,如果这个类的成员变量是基本的数据类型,就算声明的时候没有进行初始化,
系统也会自动给其初始化一个值,但是方法里面的局部变量则必须要声明一个初值,否则无法通过编译