您的位置:首页 > 编程语言 > Java开发

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

2017-11-21 16:53 876 查看
主类

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());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐