java 相同的对象_java比较两个相同对象的属性是否一致

本文介绍了一个名为CompareObejct的Java类,用于比较两个对象的属性值,通过PropertyDescriptor和Field实现深拷贝对比,并标记新数据、变更、未变和移除状态。实例演示了如何使用这个类来对比两个BDCommend对象。
摘要由CSDN通过智能技术生成

主类

import java.beans.PropertyDescriptor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

public class CompareObejct {

private CompareStatus status;

/**

* 之前原始的值

*/

private T original;

/**

* 当前的值

*/

private T current;

public CompareStatus getStatus() {

return status;

}

public T getOriginal() {

return original;

}

public void setOriginal(T original) {

this.original = original;

}

public T getCurrent() {

return current;

}

public void setCurrent(T current) {

this.current = current;

}

public void contrastObj(Class cls) {

if(this.original==null){

this.status=CompareStatus.NEW;

return;

}

if(this.status==CompareStatus.REMOVE){

return;

}

boolean isEqual=true;

try {

//Class clazz = this.original.getClass();

Field[] fields = cls.getDeclaredFields();

for (Field field : fields) {

PropertyDescriptor pd = new PropertyDescriptor(field.getName(), cls);

Method getMethod = pd.getReadMethod();

Object o1 = getMethod.invoke(this.original);

Object o2 = getMethod.invoke(this.current);

String s1 = o1 == null ? "" : o1.toString();//避免空指针异常

String s2 = o2 == null ? "" : o2.toString();//避免空指针异常

//思考下面注释的这一行:会bug的,虽然被try catch了,程序没报错,但是结果不是我们想要的

//if (!o1.toString().equals(o2.toString())) {

if (!s1.equals(s2)) {

//textList.add("不一样的属性:" + field.getName() + " 属性值:[" + s1 + "," + s2 + "]");

isEqual=false;

System.out.println("不一样的属性:" + field.getName() + " 属性值:[" + s1 + "," + s2 + "]");

}

}

} catch (Exception e) {

System.out.println(e.getMessage());

}

if(isEqual){

this.status=CompareStatus.NO_CHANGE;

}else{

this.status=CompareStatus.CHANGE;

}

}

}枚举

public enum CompareStatus {

/**

* 标记新数据

*/

NEW,

/**

* 标记变更数据

*/

CHANGE,

/**

* 标记没有变更

*/

NO_CHANGE,

/**

* 标记移除数据

*/

REMOVE

}

测试

public class CompareTest {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

BDCommend obj1 = new BDCommend();

obj1.setBzjlbh("1111");

obj1.setHjrq(new Date());

BDCommend obj2 = new BDCommend();

obj2.setBzjlbh("1112");

obj2.setHjrq(new Date());

CompareObejct compare = new CompareObejct();

compare.setCurrent(obj1);

compare.setOriginal(obj2);

compare.contrastObj(BDCommend.class);

System.out.println(compare.getStatus());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值