业务场景: 多个实体类的集合,某一个属性批量统一设值。
例如 :user实体类,包含属性 id、name、sex 现在有100多个user 要把他们的sex全部设为 男,一般的办法就是把这些user装在一个list集合中,然后遍历把值set进去。现在我就把这个功能抽取出来做成了一个工具类,代码如下
/** * 批量设置实体类集合里面某一个属性的值 * @param entitys 目标实体类集合 * @param key 目标属性 * @param value 值 * @return * @throws IllegalAccessException */ public <E> void setValue(List<E> entitys, String key, Object value) throws IllegalAccessException { for (Object list:entitys) { Class aClass = list.getClass(); Field[] aFields = aClass.getDeclaredFields();//获取实体类的所有属性 for (Field f:aFields) { if (f.getName().equals(key)){ f.setAccessible(true);//设置访问权限 f.set(list,value);//赋值 } } } }通过java反射机制拿到类所有声明的字段,然后遍历与目标属性的name进行匹配。
注意:在Java中可以通过反射进行获取实体类中的字段值,当未设置Field的setAccessible方法为true时,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常。所以set的时候先设置为true
