🍓 简介:java系列技术分享(👉持续更新中...🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝
🍓 更多文章请点击
[
文章目录

一、问题描述
已经开发过的接口,现在实体类同事改了,但是自己的接口入参DTO没有改,字段有很多,一个个比较浪费时间,因为偶尔在云桌面中,无法复制出来交给AI比对,所以提供以下工具类,进行快速找不同,比如实体有某个字段,但 DTO 没有
二、找类中字段不同工具类
java
import cn.hutool.core.util.ReflectUtil;
import java.lang.reflect.Field;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.Arrays;
public class FieldCompareMain {
public static void main(String[] args) {
// 要比较的两个类
Class<?> entityClass = BdVehicle.class;
Class<?> dtoClass = VehicleImageDTO.class;
// 获取所有字段名(不包含父类,如需包含可改用 getFields)
Set<String> entityFields = Arrays.stream(ReflectUtil.getFields(entityClass))
.map(Field::getName)
.collect(Collectors.toSet());
Set<String> dtoFields = Arrays.stream(ReflectUtil.getFields(dtoClass))
.map(Field::getName)
.collect(Collectors.toSet());
// 找出实体有但 DTO 没有的字段
Set<String> missingInDto = entityFields.stream()
.filter(f -> !dtoFields.contains(f))
.collect(Collectors.toSet());
// 找出 DTO 有但实体没有的字段
Set<String> missingInEntity = dtoFields.stream()
.filter(f -> !entityFields.contains(f))
.collect(Collectors.toSet());
System.out.println("========== 字段对比结果 ==========");
System.out.println("实体类: " + entityClass.getSimpleName());
System.out.println("DTO类: " + dtoClass.getSimpleName());
System.out.println();
System.out.println("【实体有,DTO没有的字段】(" + missingInDto.size() + "个):");
missingInDto.forEach(f -> System.out.println(" - " + f));
System.out.println();
System.out.println("【DTO有,实体没有的字段】(" + missingInEntity.size() + "个):");
missingInEntity.forEach(f -> System.out.println(" - " + f));
if (missingInDto.isEmpty() && missingInEntity.isEmpty()) {
System.out.println();
System.out.println("✅ 两个类的字段完全一致!");
}
}
}
输入要比较的两个类,查看执行结果


[
