0

次のように、オブジェクトの等価性をテストするメソッドを実装する必要があります

isEqual(MyClass o1, MyClass o2, List<String> fieldNames)

以下は、等価性を考慮する必要がList<String> fieldNamesあるインスタンス変数です。MyClass

isEqualメソッドは、異なるセットの " " を使用して異なるコード パスから呼び出されますfieldNames

私は Apache EqualsBuilder を見ましたが、私が探している同様の機能を提供していません。

助言がありますか?

4

2 に答える 2

0

試すMyClass.class.getDeclaredFields()

これにより、クラス内のすべてのフィールドのリストが取得されます。-namefield.getName()を取得するために使用できます。String

次に、フィールドを取得するためにisEqual()使用できますMyClass.class.getField(fieldName)。特定のインスタンスのこのfield.get(myClass)フィールドの値を取得できます。

ただし、fieldNames を渡す代わりに、Field[]. Fieldこれにより、 から への変換とへの変換がスキップStringされFieldます。

これについて詳しく知りたい場合は、Reflectionfrom Java をご覧ください。

幸運を!

boolean isEqual(MyClass obj1, MyClass obj2, Field[] fields) {
    for(Field field : fields)
        if(!field.get(obj1).equals(field.get(obj2)))
            return false;
    return true;
}

それを呼び出す:

Class cls = MyClass.class;
isEqual(obj1, obj2, { cls.get("myField"), cls.get("anotherField") });
于 2013-05-05T15:50:59.383 に答える