1

私の要件は、同じ不明/ジェネリック型の 2 つのオブジェクトを比較することです。オブジェクトは複雑です。それらには、それ自体がリストを含むことができるリストを含めることができます。

したがって、私の最初の考えは、オブジェクトを比較するために Comparator を使用し、Bean のすべてのプロパティを検出するためにリフレクションを使用し、オブジェクトに含まれるネストされたリストを処理するために再帰を使用することです。

または、Javaですべてを実行するユーティリティはありますか?

4

6 に答える 6

1

Bean Utilsを使用するか、直接使用できます... Apache Commons EqualsBuilder

同様の解決策

編集済み:この投稿 をご覧ください。グーグルで検索すると、役に立つかもしれないこの BeanDiff apiも見つかりました。

于 2012-04-26T12:21:46.923 に答える
1

ネストされたすべてのオブジェクト ツリーが 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

于 2012-04-26T12:25:11.333 に答える
0

雌羊。Reflection を使用してフィールドのリストを取得し、そこから移動できると思います。特定のフィールドが単純なタイプか複雑なタイプかを判断するには、複雑なコードが必要になり、比較するときに複雑なフィールドに掘り下げます。

フィールド、その名前、およびタイプのリストの取得を開始するには、これを参照してください

于 2012-04-26T12:20:19.623 に答える
0

免責事項 : 私は Java 開発者ではありません。

未知の型を比較す​​るきれいな方法はないと思います。これが私がすることです:インターフェイスを宣言し、それを ComparableInterface と呼びましょう

interface ComparableInterface {
    function isEqual(ComparableInterface $a);
}

不明なオブジェクトがインスタンスになる可能性のあるすべてのクラスに、このインターフェイスを実装してください。次に、それらを比較するために使用します。

私が考えることができる他の解決策は、いハックになるでしょう:/。また、わからないことを比較する必要がある場合は、設計に問題があると思います。

于 2012-04-26T12:22:00.380 に答える
0

私は現在、同様の問題に取り組んでいます。Java リフレクションを使用すると、同じ不明/汎用タイプの 2 つのオブジェクトを比較できることが確認できます。必要なものはすべてここで見つかりました。これを行う方法の簡単な概要は次のとおりです。

  1. 関数で 2 つのオブジェクトを取得する
  2. ob1 のフィールドのすべてを決定する
  3. オブジェクトが等しいタイプであると仮定すると、 one フィールドを使用して両方のオブジェクトから値を取得し、次のように比較できます。field.get(ob1).equals(field.get(ob2)

ただし、オブジェクト内のオブジェクトを比較することは、はるかに困難です。私はそれに対する解決策を見つけていません。ここに問題があります。リフレクションを使用してアイテムと比較するには、2 つのオブジェクトが必要です。未知のタイプのオブジェクトからオブジェクトを抽出する方法をまだ発見していません。何か見つけたら教えてください。

于 2013-05-03T14:43:49.367 に答える
0

あなたがすでに述べたように私はそれをします。

  1. 両方のオブジェクトが同じタイプであり、
  2. オブジェクト 1 のすべての変数を反復処理します
    1. オブジェクト 2 の変数の値を取得する
    2. valueOfVariableInObject1.compareTo(valueOfVariableInObject2) を呼び出します
于 2012-04-26T12:15:07.357 に答える