私の要件は、同じ不明/ジェネリック型の 2 つのオブジェクトを比較することです。オブジェクトは複雑です。それらには、それ自体がリストを含むことができるリストを含めることができます。
したがって、私の最初の考えは、オブジェクトを比較するために Comparator を使用し、Bean のすべてのプロパティを検出するためにリフレクションを使用し、オブジェクトに含まれるネストされたリストを処理するために再帰を使用することです。
または、Javaですべてを実行するユーティリティはありますか?
私の要件は、同じ不明/ジェネリック型の 2 つのオブジェクトを比較することです。オブジェクトは複雑です。それらには、それ自体がリストを含むことができるリストを含めることができます。
したがって、私の最初の考えは、オブジェクトを比較するために Comparator を使用し、Bean のすべてのプロパティを検出するためにリフレクションを使用し、オブジェクトに含まれるネストされたリストを処理するために再帰を使用することです。
または、Javaですべてを実行するユーティリティはありますか?
Bean Utilsを使用するか、直接使用できます... Apache Commons EqualsBuilder
同様の解決策
編集済み:この投稿 をご覧ください。グーグルで検索すると、役に立つかもしれないこの BeanDiff apiも見つかりました。
ネストされたすべてのオブジェクト ツリーが Comparable を実装していることを確認できる場合は、次を使用できます。
public int compareTo(Object o) {
return CompareToBuilder.reflectionCompare(this, o);
}
http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/builder/CompareToBuilder.html
雌羊。Reflection を使用してフィールドのリストを取得し、そこから移動できると思います。特定のフィールドが単純なタイプか複雑なタイプかを判断するには、複雑なコードが必要になり、比較するときに複雑なフィールドに掘り下げます。
フィールド、その名前、およびタイプのリストの取得を開始するには、これを参照してください
免責事項 : 私は Java 開発者ではありません。
未知の型を比較するきれいな方法はないと思います。これが私がすることです:インターフェイスを宣言し、それを ComparableInterface と呼びましょう
interface ComparableInterface {
function isEqual(ComparableInterface $a);
}
不明なオブジェクトがインスタンスになる可能性のあるすべてのクラスに、このインターフェイスを実装してください。次に、それらを比較するために使用します。
私が考えることができる他の解決策は、いハックになるでしょう:/。また、わからないことを比較する必要がある場合は、設計に問題があると思います。
私は現在、同様の問題に取り組んでいます。Java リフレクションを使用すると、同じ不明/汎用タイプの 2 つのオブジェクトを比較できることが確認できます。必要なものはすべてここで見つかりました。これを行う方法の簡単な概要は次のとおりです。
field.get(ob1).equals(field.get(ob2)
ただし、オブジェクト内のオブジェクトを比較することは、はるかに困難です。私はそれに対する解決策を見つけていません。ここに問題があります。リフレクションを使用してアイテムと比較するには、2 つのオブジェクトが必要です。未知のタイプのオブジェクトからオブジェクトを抽出する方法をまだ発見していません。何か見つけたら教えてください。
あなたがすでに述べたように私はそれをします。