Java反射替换属性字段上注解属性对应的值

 /**
     * 设置ExcelProperty注解对应的value
     *
     * @param properties 属性字段和注解属性字段值 键值对
     * @tClass 泛型 那个类
     */
    public static  <T> void setHeaderValue(Properties properties,Class<?> tClass) {
        Assert.notNull(properties, "properties file must mot be null");
        if (properties.size() == 0) {
            return;
        }
        Set<Map.Entry<Object, Object>> entries = properties.entrySet();
        entries.forEach(entry -> {
            try {
                //属性名
                String key = String.valueOf(entry.getKey());
                if (StringUtils.isBlank(key)) {
                    return;
                }
                //属性值
                String value = String.valueOf(entry.getValue());
                if (StringUtils.isBlank(value)) {
                    return;
                }
                //反射找到字段
                Field displayName = tClass.getDeclaredField(key);
                //获取字段上的注解
                ExcelProperty annotation = displayName.getAnnotation(ExcelProperty.class);
                InvocationHandler h = Proxy.getInvocationHandler(annotation);
                // 获取 AnnotationInvocationHandler 的 memberValues 字段
                Field hField;
                hField = h.getClass().getDeclaredField("memberValues");
                // 因为这个字段是 private final 修饰,所以要打开权限
                hField.setAccessible(true);
                // 获取 memberValues

                Map memberValues = (Map) hField.get(h);
                // 修改 value 属性值
                memberValues.put("value", value.split(","));


            } catch (Exception e) {
                log.error("设置ExcelProperty对应value属性失败", e);
            }
        });


    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值