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

主类


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

public class CompareObejct<T> {
	
	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<T> 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
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值