java2个对象比较不同_Java比较两个对象的不同之处

package com.sea.test.utils;

import java.beans.PropertyDescriptor;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

import java.lang.reflect.Field;

import java.lang.reflect.Method;/**

* @author sea

* 比较两个Bean的内容

* @param */

public class ContrastObjUtils{/**

* 自定义注解,如果字段上有该注解,就比较

* @author sea

**/@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)public@interface ComparaField {

String value()default "";

}/**

* 之比较有注解的字段

* @param oldBean

* @param newBean

* @return*/

publicString comparObjWithAnnotion(Object oldBean, Object newBean) {

String result= "";

T pojo1=(T) oldBean;

T pojo2=(T) newBean;try{

Class clazz=pojo1.getClass();

Field[] fields=pojo1.getClass().getDeclaredFields();int i = 1;//loop all field

for(Field field : fields)

{

boolean hasAnnotation= field.isAnnotationPresent(ComparaField.class);//如果没有注解,skip

if (!hasAnnotation) {continue;

}

PropertyDescriptor pd= newPropertyDescriptor(field.getName(), clazz);

Method getMethod=pd.getReadMethod();

Object o1=getMethod.invoke(pojo1);

Object o2=getMethod.invoke(pojo2);if (o1 == null || o2 == null) {continue;

}if (!o1.toString().equals(o2.toString()))

{if (i != 1)

{

result+= ";";

}//要显示的字段名

String fieldName =field.getName();

result+= i + "、" + fieldName + ",旧值:" + o1 + ",新值:" +o2;

}

i++;

}

}catch(Exception e) {

e.printStackTrace();

}returnresult;

}/**

* 比较所有field

* @param oldBean

* @param newBean

* @return*/

publicString comparObj(Object oldBean, Object newBean) {

String result= "";

T pojo1=(T) oldBean;

T pojo2=(T) newBean;try{

Class clazz=pojo1.getClass();

Field[] fields=pojo1.getClass().getDeclaredFields();int i = 1;//loop all field

for(Field field : fields) {if ("serialVersionUID".equals(field.getName())) {continue;

}

PropertyDescriptor pd= newPropertyDescriptor(field.getName(), clazz);

Method getMethod=pd.getReadMethod();

Object o1=getMethod.invoke(pojo1);

Object o2=getMethod.invoke(pojo2);if (o1 == null || o2 == null) {continue;

}if (!o1.toString().equals(o2.toString())) {if (i != 1) {

result+= ";";

}//要显示的字段名

String fieldName = "";

fieldName=field.getName();

result+= i + "、" + fieldName + ",旧值:" + o1 + ",新值:" +o2;

i++;

}

}

}catch(Exception e) {

e.printStackTrace();

}returnresult;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值