java中遍历一个对象的所有属性并set值 缓存优化版

Java反射

1、创建缓存池,可以加快访问速度
private static final Map<String, List<Field>> CACHE = new HashMap<String, List<Field>>();
2、获取实体类的所有属性,返回Field列表
private List<Field> getFieldOfClass(Class<?> clazz) {
        List<Field> fields = CACHE.get(clazz.getName());
        if (fields == null) {
            Field[] fieldArr = clazz.getDeclaredFields();
            fields = new ArrayList<Field>(fieldArr.length);
            for (Field each : fieldArr) {
                each.setAccessible(true);
                fields.add(each);
            }
            CACHE.put(clazz.getName(), fields);
        }
        return fields;
    }
3、为对象设置值
public <T> T setObjVal(T obj) {
        if (obj == null) {
            return null;
        }
        List<Field> fields = getFieldOfClass(obj.getClass());
        for (int j = 0, size = fields.size(); j < size; j++) {
            try {
                // 获取属性的名字
                Field each = fields.get(j);
                //为set方法set值
                each.set(obj, "参数值");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return obj;
    }

猜你喜欢

转载自blog.csdn.net/wsc912406860/article/details/81486879