通过反射判断对象的属性值是否为空
问题产生场景?
在项目开发过程中我采用了表单内部嵌套列表的形式提交数据,将表单于列表数据同时提交保存。 有时候管理人的出资人结构我新增了多条 这时候并没有真正的保存到数据库,而是保存在了页面前端临时保存等待真正的提交 我操作删除 这时候删除实现的方式是
function delFundManage(obj){
$(obj).parent().parent().remove();
}
移除了 但是在创建列表的时候
进行移除第一个
arr[1] 这里并没有将修改为arr[0] 这里提交到后台后出现 由于下表为1 所以出现了两条数据 这条空数据不应该存在所以需要判断当前对象属性值是否全部为空
进入主题 实现判断对象的属性值是否为空 采用反射的思想:
private boolean checkObjFiledsIsNull(Object obj) { boolean flag = false; int count = 0; Class<?> clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field:fields) { field.setAccessible(true); try{ if(field.get(obj)==null){ count++; if(count == fields.length){ flag=true; } } }catch (Exception e){ logger.error("对象属性检查异常:"+e); } } return flag; }
这里设计到了获取属性集合的方式 getFields() 与 getDeclaredFields()两者的区别:
getField() 获取类中public修饰的属性
getDeclaredFields()获取的所有不包括继承属性
当对私有熟悉操作时采用setAccessible(true) 方法进行擦除 我习惯叫暴力破解