javaの2つのオブジェクト属性の比較に基づいて
二つのオブジェクトが比較的に等しいというやり方があります。
1、状況1:2つのオブジェクトが等しいかどうかを判断するだけで、equals()メソッドを書き換えるだけでよい。ここでは説明しなくてもいいです。
2、ケース2:ケース1以外に、その属性が違うということを知る必要があります。クラス反射を採用します。
具体的なコードは以下の通りです。
1、状況1:2つのオブジェクトが等しいかどうかを判断するだけで、equals()メソッドを書き換えるだけでよい。ここでは説明しなくてもいいです。
2、ケース2:ケース1以外に、その属性が違うということを知る必要があります。クラス反射を採用します。
具体的なコードは以下の通りです。
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);
}
以上の本はjavaの中で二つの対象属性の比較に基づいて、小編が皆さんに提供している内容の全部を共有しています。参考にしてもらいたいです。どうぞよろしくお願いします。