java 通过反射遍历所有字段修改值

java 通过反射遍历所有字段修改值,避免重复set、get

比如一张表里的字段十几个,而这个表里的图片存储字段有八九个,在返回这个实体类的时候,要对图片进行加密或者其他操作,那就要在实体类查询结果出来后,一个个的get修复,再set赋值,代码量很多,另外如果有多个接口用到,就会产生重复代码;
通过java 的反射,遍历所有字段,进行一个判断,取出来的值是带有图片链接的,进行操作,省去了很多代码,下面贴代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ClassUtil {
   
    private  final Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 通过反射所有字段,带有图片的字段,重新赋值
     *
     * @param obj 对象
     */
    public void setImageValue(Object obj) {
        try {
            Class aClass = obj.getClass();
            Field[] fields = aClass.getDeclaredFields();
            for (Field field : fields) {
                PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
                        aClass);
                // 获取get方法
                Method getMethod = pd.getReadMethod();
                // 获取set方法
                Method setMethod = pd.getWriteMethod();
                // 通过get方法获取到值
                Object o = getMethod.invoke(obj);
                if (o != null) {
                    String s = o.toString();
                    if (s.contains("jpg")) {
                        // 业务操作
                        // 更新为新的值
                        setMethod.invoke(obj, builder.toString());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java 中可以使用反射来删除字段上的注解,包括 @Excel 注解。下面是示例代码: ```java import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class AnnotationRemover { public static void main(String[] args) { // 获取需要移除注解的类的 Class 对象 Class<MyClass> clazz = MyClass.class; // 获取所有字段 Field[] fields = clazz.getDeclaredFields(); // 遍历所有字段 for (Field field : fields) { // 获取该字段上的所有注解 Annotation[] annotations = field.getAnnotations(); // 需要移除的注解类型 Class<Excel> excelClass = Excel.class; // 构造一个新的注解列表,不包含需要移除的注解 List<Annotation> newAnnotations = new ArrayList<>(); for (Annotation annotation : annotations) { if (!excelClass.isInstance(annotation)) { newAnnotations.add(annotation); } } // 将新的注解列表设置到该字段上 field.setAnnotations(newAnnotations.toArray(new Annotation[newAnnotations.size()])); } } } class MyClass { @Excel private String excelField; private String normalField; } ``` 在上面的示例代码中,我们遍历了 MyClass 类中的所有字段,如果发现该字段上有 @Excel 注解,则将其从注解列表中移除。最后,调用 setAnnotations() 方法将新的注解列表设置到该字段上。 需要注意的是,使用反射修改注解是一种高级用法,建议在必要的时候才使用,并且要谨慎操作,避免出现不可预料的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值