public static boolean allFieldsIsNull(Object obj) throws Exception{
Class cla = (Class) obj.getClass();// 得到类对象
//Field[] fs = cla.getDeclaredFields();
List<Field> fs = getFields(obj);
boolean flag = true;
for (Field f : fs) {//遍历属性
f.setAccessible(true); // 设置属性是可以访问的(私有的也可以)
if(f.getGenericType().toString().substring(0, 14).equals("java.util.List") ||
f.getGenericType().toString().equals("java.util.List")) {
Method m = (Method) obj.getClass().getMethod(
"get" + getMethodName(f.getName()));
List<Object> val = (List<Object>) m.invoke(obj);
if(val == null || val.size() == 0) {
continue;
}else {
flag = false;
break;
}
}
Object val = f.get(obj);// 得到此属性的值
if(val!=null) {//只要有一个属性不为空,那么就不是所有的属性值都为空
flag = false;
break;
}
}
return flag;
}
/**
* 获取obj对象所有的Field(包括父类)
* @param obj
* @return
*/
public static List<Field> getFields(Object obj) {
List<Field> result = new ArrayList<Field>();
Field[] second;
for (Class<?> superClass = obj.getClass(); superClass != Object.class; superClass = superClass
.getSuperclass()) {
second = superClass.getDeclaredFields();
result.addAll(Arrays.asList(second));
}
return result;
}
这个工具类的坑就是在这行:
Field[] fs =cla.getDeclaredFields();//该方法能获取到本类的所有属性,包括private,protected和public,但不能获取到继承的父类的属性。
//cla.getFields()既能获取本类的属性也能得到父类的属性,但仅仅能获取public修饰的字段。