-1

次の要件に基づいてオブジェクトの同等性を実装しようとしています。

class MyObject {
  String x;
  String y;
}

1)比較されている2つのオブジェクトの両方のプロパティがnull以外の場合、x.equals(x)&& y.equals(y)の場合は等しい

2)比較対象のオブジェクトのいずれかで少なくとも1つのxがヌルの場合、y.equals(y)の場合は等しい(両方のyがヌルでないことを前提とする)

3)比較対象のオブジェクトのいずれかで少なくとも1つのyがヌルの場合、x.equals(x)の場合は等しい(両方のxがヌルでないことを前提とする)

数回の試行の後、これらの要件に基づいて、equalsメソッドの推移的な関係を実現することは不可能だと思い始めています。コメントは大歓迎です!Thks。

4

3 に答える 3

6

これらの(x、y)ペアを取ります:

ルールによれば、(1,2)=(1、null)=(1,3)であるため、(1,2)=(1,3)と信じることができます。これは誤りです。そうです、それは不可能です。

編集:ルールの誤読、修正済み

于 2012-08-02T17:24:28.830 に答える
1

これらの3つの要件から、あなたは正しいです。推移性は得られません。

これらの例を見てください:

x = "hello", y = "mom"
x = "hello", y = null
x = "hello", y = "world"

あなたの言うことによれば、1番目と2番目は等しく、2番目と3番目は等しいが、1番目と3番目は等しくない。

おそらく必要なのは、1)1つのxがnullの場合、他のxも等しくなければならず、2)ysに対して同じであるという制限を追加することです。

于 2012-08-02T17:26:32.637 に答える
0

「少なくとも1つのyがnullの場合」の意味がよくわからないので、これをさらに明確にする必要があるかもしれませんが、ここでは、私があなたの仕様をどのように理解しているかに基づいた解決策を示します。

public boolean yourEquals(Object x, Object y) {

    if(x != null && y != null) return x.equals(x) && y.equals(y);
    else if(x == null) return y.equals(y);
    else return x.equals(x);

}

欠陥のあるものを作成した場合は、私の仮定を修正してください。ただし、問題の説明が場所によっては理解しにくい場合があります。

編集:もちろん、この関係は推移的ではありません。上記のように、要件との関係は推移的であってはなりません。ただし、これは3つのルールに基づいてブール値を返す関数です。

于 2012-08-02T17:25:33.620 に答える