package com.covenlonki.utils;
/**
* 对比结果
*/
public class ComparedResult {
/**
* 对比字段名称
*/
private String fieldName;
/**
* 对比
*/
private String compare;
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = "【" + fieldName + "】";
}
public String getCompare() {
return compare;
}
public void setCompare(String compare) {
this.compare = compare;
}
@Override
public String toString() {
return "ComparedResult{" +
"fieldName='" + fieldName + '\'' +
", compare='" + compare + '\'' +
'}';
}
}
package com.covenlonki.utils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.Objects;
/**
* 对比实体类
*/
@Data
public class ComparedEntity {
@ApiModelProperty(name = "姓名")
public String name;
@ApiModelProperty(name = "年龄")
private Integer age;
@ApiModelProperty(name = "修改人ID")
private Integer modifyUserId;
@ApiModelProperty(name = "修改人姓名")
private String modifyUserName;
@ApiModelProperty(name = "修改时间")
private Date modifyTime;
public ComparedEntity() {
}
public ComparedEntity(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ComparedEntity that = (ComparedEntity) o;
return Objects.equals(name, that.name) && Objects.equals(age, that.age) && Objects.equals(modifyUserId, that.modifyUserId) && Objects.equals(modifyUserName, that.modifyUserName) && Objects.equals(modifyTime, that.modifyTime);
}
@Override
public int hashCode() {
return Objects.hash(name, age, modifyUserId, modifyUserName, modifyTime);
}
@Override
public String toString() {
return "ComparedEntity{" +
"name='" + name + '\'' +
", age=" + age +
", modifyUserId=" + modifyUserId +
", modifyUserName='" + modifyUserName + '\'' +
", modifyTime=" + modifyTime +
'}';
}
}
package com.covenlonki.utils;
import cn.hutool.json.JSONUtil;
import io.swagger.annotations.ApiModelProperty;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 对比工具
*/
public class ComparedUtil {
public static void main(String[] args) {
ComparedEntity u1=new ComparedEntity();
u1.setName("李师");
u1.setAge(18);
u1.setModifyUserName("admin");
u1.setModifyUserId(666);
ComparedEntity u2=new ComparedEntity();
u2.setName("李师22");
u2.setAge(20);
u2.setModifyUserName("covenlonki");
u2.setModifyUserId(888);
List<ComparedResult> comparedResults = compareTwoObject(u1, u2);
String s = JSONUtil.toJsonStr(comparedResults);
System.out.println(s);
}
/**
* 比较新旧对象内容是否有变化
* [url=home.php?mod=space&uid=952169]@Param[/url] oldObject 旧对象
* @param newObject 新对象
* [url=home.php?mod=space&uid=155549]@Return[/url] 结果
*/
private static List<ComparedResult> compareTwoObject(ComparedEntity oldObject, ComparedEntity newObject) {
List<ComparedResult> ret=new ArrayList<>();
Class clazz =oldObject.getClass();
try {
// 获取所有字段
Field[] Fields = clazz.getDeclaredFields();
for (Field field : Fields) {
String fieldName = field.getName();// 字段名
if (fieldName.equals("modifyUserId") || fieldName.equals("modifyUserName") || fieldName.equals("modifyTime")) {
continue;
}
ApiModelProperty fieldAnon =field.getAnnotation(ApiModelProperty.class);
String filedAnoName="";
if(null!= fieldAnon){
filedAnoName= fieldAnon.name(); // 字段中文名称
}
PropertyDescriptor pd=new PropertyDescriptor(field.getName(),clazz);
Method getMethod=pd.getReadMethod();
// 在oldObject上调用get方法等同于获得oldObject的属性值
Object oldValue = getMethod.invoke(oldObject);
// 在newObject上调用get方法等同于获得newObject的属性值
Object newValue = getMethod.invoke(newObject);
// 对比两个值是否一致
if(!oldValue.equals(newValue)){
ComparedResult result=new ComparedResult();
result.setFieldName(filedAnoName);
result.setCompare(oldValue + " -> " + newValue);
ret.add(result);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* 比较值是否相等
*
* @param newValue 新值
* @param oldValue 旧值
* @return 相等 返回true
*/
private static boolean compareTwo(Object newValue, Object oldValue) {
// 如果两字段都为空,也认为相等(用==判断,不得用equals)
if (oldValue == null || newValue == null) {
return true;
}
if (oldValue == null && newValue == "") {
return true;
}
// 比较内容
if (newValue.equals(oldValue)) {
return true;
}
return false;
}
}
运行结果:
[{"fieldName":"【姓名】","compare":"李师 -> 李师22"},{"fieldName":"【年龄】","compare":"18 -> 20"}]
没有合适的资源?快使用搜索试试~ 我知道了~
java对象实体类属性字段对比变化过程
共1个文件
txt:1个
需积分: 0 0 下载量 178 浏览量
2023-11-13
15:24:50
上传
评论
收藏 2KB RAR 举报
温馨提示
Java对象实体类属性字段对比变化过程是指在一个Java对象实体类的生命周期中,其属性字段的变化情况。这种变化过程通常涉及到对象的创建、使用和销毁等阶段。 在对象的创建阶段,Java对象实体类会根据预设的属性字段和初始值进行初始化。这些属性字段通常定义在类的声明中,并使用关键字进行描述。在实例化一个对象时,Java虚拟机会根据类的定义分配相应的内存空间,并将属性字段的值设置为初始值。 在使用对象的过程中,属性字段的值可能会发生改变。这些改变可能是通过直接访问属性字段的方式进行的,也可能是通过调用相应的方法来修改的。当属性字段的值发生改变时,对象的内部状态也会相应地更新。 当对象不再被使用时,Java虚拟机会自动回收其占用的内存空间。在这个过程中,对象的属性字段的值将被释放,以便为其他对象所使用。 在对比变化过程方面,Java对象实体类通常会使用版本控制的方式来记录属性字段的变化情况。这种版本控制机制可以帮助开发人员更好地追踪和管理对象的状态变化。同时,Java对象实体类还可以提供相应的工具和方法来获取和比较对象的不同版本,以便更好地理解和管理对象的生命周期。
资源推荐
资源详情
资源评论
收起资源包目录
新建文本文档 (2).rar (1个子文件)
新建文本文档 (2).txt 7KB
共 1 条
- 1
资源评论
li642041156
- 粉丝: 5
- 资源: 31
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功