0

equals()Javaでメソッドを実装するのに役立つデザインパターン(またはイディオム)はありますか?

その作業はそれほど難しいことではありませんが、ほとんどの場合、ほぼ同じです...そのため、パターンがあると思いますが、見つかりませんでした。

UPDATE

私はメソッドを選択しました:generate equals() method in Eclipseしかし...私は(AbstractListで)生成されたコードをより良くするための良い方法を見つけました:

if (!(attributes ==null ? other.attributes==null : attributes.equals(other.attributes))) 
    return false; 

生成される代わりに:

if (attributes == null) {
        if (other.attributes != null)
        return false;
    } else if (!attributes.equals(other.attributes))
        return false;
4

6 に答える 6

4

私は常に次のコードを使用します:

if (null == obj) return false;
if (this == obj) return true;
if (!(object instanceof MyClass)) return false;
MyClass that = (MyClass) obj;
EqualsBuilder eb = new EqualsBuilder();
eb.append(this.businessKey, that.businessKey);
return eb.isEquals();

..。

私はシーケンスやpkのような技術的なキーを決して使用しません。常にビジネス分野です。したがって、これを一般的にすることはできないと思いますが、特定のクラスに固有にする必要があります。

于 2012-10-11T06:54:24.490 に答える
3

一般に、equals()メソッドを実装するには、次のようにします。EclipseはhashCode、toString、equals()メソッドを非常にうまく生成できるため、Eclipseからそれらを生成します。

于 2012-10-11T06:48:55.120 に答える
1

2つのオブジェクトが特定の意味で「同じ」であるかどうかを判断するのは、ほとんど自分次第です...同じデータ(完全に有効なユースケース)が含まれている場合は等しいか、より厳密には、同じ物理オブジェクトである場合は同じである必要があります。クラスタ化された環境で比較した場合、メモリ(これも有効)またはDB内の同じ行ですか?

オーバーライドすることも忘れないで.hashCode()ください。そうしないと、傷ついた世界にいることになります:-)

(また、@ Andreasと@flashからの良い記事の提案。)

乾杯、

于 2012-10-11T06:47:15.200 に答える
1

たぶんこれは役に立ちます:equalsの実装。特に、hashcode()とequals()の間の密接な関係に注意してください。それ以外は、equals()の具体的な実装は、実際にはクラスの設計に依存していると思います。つまり、2つのオブジェクトをいつ等しく扱うかということです。

于 2012-10-11T06:47:23.190 に答える
1

Java 言語仕様の説明を見てください。

equalsメソッドは、オブジェクトの等価性の概念を定義するだけです

それとは別に、このメソッドの設計に関与する設計パターンはありません。実際のところ、equalsメソッドは Java 言語の設計者によって既に設計されており、その設計を利用することしかできません。独自の equals メソッドの書き方に自信がない場合は、代わりに作業を行う IDE のような Eclipse の助けを借りることを検討してください。

于 2012-10-11T06:57:52.160 に答える
0

あなたの期待についてはよくわかりません。クラスの 2つの異なるequals()オブジェクトが等しいかどうかを比較する基準を定義するためのものです。

一般に、各属性を1つずつ比較しますが、選択した属性の数を減らして比較を行うことは非常に可能であり、サポートされています。

于 2012-10-11T06:48:06.793 に答える