兩個對象進行比較相等,有兩種做法: 1,情況一:當僅僅只是判斷兩個對象是否相等時,只需重寫equals()方法即可。這裡就不用說明 2.情況二:當除了情況一之外,還需知道是那個屬性不同,那麼就需要採用類反射,具體代碼如下: public static void main(String[] args) ...
兩個對象進行比較相等,有兩種做法:
1,情況一:當僅僅只是判斷兩個對象是否相等時,只需重寫equals()方法即可。這裡就不用說明
2.情況二:當除了情況一之外,還需知道是那個屬性不同,那麼就需要採用類反射,具體代碼如下:
public static void main(String[] args) {
A a = new A();
a.setUserName("a");
a.setPassword("p");
a.setQq("q");
a.setWechat("w");
A b = new A();
b.setUserName("a");
b.setPassword("p");
b.setQq("q");
b.setWechat("ww");
//只是比較兩個對象是否相等,那麼直接重寫equals方法
System.out.println( a.equals(b));
try {
Map<String, String> maps = compare( a, b );
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
public static <T> Map<String, String> compare(T obj1, T Obj2)
throws Exception {
Map<String, String> result = new HashMap<String, String>();
Field[] fs = obj1.getClass().getDeclaredFields();
for (Field f : fs) {
f.setAccessible(true);
Object v1 = f.get(obj1);
Object v2 = f.get(Obj2);
if( ! equals(v1, v2) ){
result.put(f.getName(), String.valueOf(equals(v1, v2)));
}
}
return result;
}
public static boolean equals(Object obj1, Object obj2) {
if (obj1 == obj2) {
return true;
}
if (obj1 == null || obj2 == null) {
return false;
}
return obj1.equals(obj2);
}