私はフィールドを持たないクラスをいくつか持っているとしましょう。たとえばのみinterface
を実装するクラス:フィールドのないクラスのequals()の適切な実装とは何ですか?
public class SomeClass implements SomeInterface
{
@Override
public void someMethod(int param) {...}
@Override
public int getSomeValue(OtherClass param) {return ...;}
}
は、今私は、このためequals()
を上書きしたいです。 true
を返すことはできますか?「オブジェクトには状態がないので、常に等しい」と主張することで、
このような実装:
@Override
public boolean equals(Object other)
{
if (null == other || !(other instanceof SomeClass))
return false;
return true;
}
編集:
このクラスはイベントリスナーです。私はそれをインスタンス化し、非同期要求へのリスナとして他のデータとともに、オブジェクトConfig
にカプセル化して渡します。
つまり、という名前のクラスがあり、SomeClass
と他のデータで構成されています。
public class Config
{
SomeClass someClass;
int otherData;
//...
@Override
public boolean equals(Object other) {/*???*/}
}
は実際に私が(私は再三の要求を防ぎたいので)この
Config
クラスの
equals
を実装したかったです。しかし
Config
の1つの部分が
SomeClass
のこのインスタンスであるので、私はそれをどうするべきか考えていました。
サイド質問:SomeClass
が入れ子になったクラスであり、その外側のクラスの暗黙的な参照を持っている場合は、何をすべきか? (私の文脈では、それです。)
なぜ、そのようなクラスに対して 'equals'をオーバーライドするのですか?おそらくそのクラスのインスタンスをSetまたはMapのキーに格納するつもりはありませんか? – Eran
私はそれらが同じクラスのものである場合に限り同等であると言います。 'クラスOtherClassがSomeClassを拡張していて、いくつかのメソッドをオーバーライドした場合、それらは等しくあってはいけません。 –
通常、私は静的メソッドを避けるために、反対を提唱しますが、クラスには**フィールドがない場合は何もしません。なぜ私は最初にそのクラスのインスタンスを作成する必要があるのだろうかと思っています。 – GhostCat