程序员子龙(Java面试 + Java学习) 程序员子龙(Java面试 + Java学习)
首页
学习指南
工具
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
开源项目
技术书籍
  • 基础

    • java 学习路线图
    • HashMap 详解
    • Java 8 日期和时间 - 如何获取当前时间和时间戳?
    • Java 模板变量替换(字符串、占位符替换)
    • JDK 代理
    • Java SPI 详解
    • java stream 看这一篇文章就够了
    • Java 泛型详解
    • Java 动态修改注解值
    • 如何正确遍历删除List中的元素
    • 什么是Java注解
    • 异步编程神器:CompletableFuture详解
    • FIFO 、LRU、LFU算法
    • 十进制转十六进制
    • java中double类型数据加减乘除操作精度丢失问题及解决方法
    • JAVA利用反射清除实体类对应字段
      • 使用场景
      • 工具类
      • 测试
    • JSON转换问题最全详解(json转List,json转对象,json转JSONObject)
    • java 8 List 根据某个字段去重
    • Java List排序
    • 压缩算法:字符串(JSON)压缩和解压【JDK之Deflater压缩与Inflater解压】
    • BCD码是什么?
    • Java二进制、八进制、十进制、十六进制转换
    • Java String字符串 与 ASCII码相互转换
    • 什么是跨域?解决方案有哪些?
    • Java 16进制字符串转10进制
    • LinkedHashMap实现LRU - 附重点源码解析
    • 去掉 if...else 的七种绝佳之法
    • 一眼看清@JSONField注解使用与效果
  • JVM

  • Spring

  • 并发编程

  • Mybatis

  • 网络编程

  • 数据库

  • 缓存

  • 设计模式

  • 分布式

  • 高并发

  • SpringBoot

  • SpringCloudAlibaba

  • Nginx

  • 面试

  • 生产问题

  • 系统设计

  • 消息中间件

  • Java
  • 基础
程序员子龙
2024-03-11
目录

JAVA利用反射清除实体类对应字段

# 使用场景

该工具类适用于某些接口中一些参数不需要设置为null,通常我们都是在代码中调用对应字段的set方法显示的去进行设置为null。而该工具类则是通过反射来进行设置,凡是标注了对应注解的字段都会进行清空

# 工具类

1.自定义忽略字段注解IgnoreField

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreField {
}

1
2
3
4
5

2.工具类

import com.weiyiji.annotation.IgnoreField;

import java.lang.reflect.Field;
import java.util.Collection;

public class BusinessFieldRemoveUtil {

    static String JAVA_LANG_STRING = "java.lang.String";

    public static void removeFields(Object object) throws Exception {
        try {
            removeField(object);
        } catch (Exception e) {
            throw new Exception("不需要的业务字段移除失败" + e.getMessage());
        }
    }

    private static void removeField(Object removeObject) throws IllegalAccessException {
        Class<?> infoClass = removeObject.getClass();
        Field[] infoFieldArray = infoClass.getDeclaredFields();
        for (Field field : infoFieldArray) {
            if (field.isAnnotationPresent(IgnoreField.class)) {

                if (field.getType().getTypeName().equals(JAVA_LANG_STRING)) {
                    field.setAccessible(true);
                    field.set(removeObject, null);
                } else {
                    field.setAccessible(true);
                    Object obj = field.get(removeObject);
                    if (obj == null) {
                        continue;
                    }
                    if (obj instanceof Collection) {
                        Collection collection = (Collection) obj;
                        for (Object o : collection) {
                            if (o != null) {
                                removeField(o);
                            }
                        }
                    } else {
                        removeField(obj);
                    }
                }
            }
        }
    }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

# 测试

实体类:

@Data
@Builder
public class User {
  private String name;
  private String address;
  @IgnoreField
  private String email;
  @IgnoreField
  private String qq;

}

1
2
3
4
5
6
7
8
9
10
11
12

测试类:

  public static void main(String[] args) {
    User build =
        User.builder()
            .name("程序员子龙")
            .qq("123456")
            .address("北京")
            .wx("xxxx")
            .email("qq.com")
            .build();
    System.out.println(build);
    try {
      BusinessFieldRemoveUtil.removeFields(build);
      System.out.println(build);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

输出结果:

User(name=程序员子龙, address=北京, email=qq.com, qq=123456, wx=xxxx) User(name=程序员子龙, address=北京, email=null, qq=null, wx=null)
1
上次更新: 2024/03/18, 15:55:19
java中double类型数据加减乘除操作精度丢失问题及解决方法
JSON转换问题最全详解(json转List,json转对象,json转JSONObject)

← java中double类型数据加减乘除操作精度丢失问题及解决方法 JSON转换问题最全详解(json转List,json转对象,json转JSONObject)→

最近更新
01
一个注解,优雅的实现接口幂等性
11-17
02
MySQL事务(超详细!!!)
10-14
03
阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了
10-09
更多文章>
Theme by Vdoing | Copyright © 2024-2024

    辽ICP备2023001503号-2

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式