私のチームが取り組んでいるコードには、クラス階層で定義されていないいくつかのクラスがequals
あります。次のように、 usingと一貫性のあるhashCode
ものを実装したいと思います。Comparable
compareTo
equals
hashCode
class MyClass implements Comparable<MyClass>
{
private String myProperty;
// Other properties, etc.
....
public int compareTo(MyClass obj) {
// Natural ordering comparisons
...
// Reach here if natural ordering properties are equivalent
return new Integer(this.hashCode()).compareTo(new Integer(obj.hashCode());
}
}
これは実装の有効な手段と見なされComparable
ますか? hashCode
デフォルトの実装を使用する際に注意すべき落とし穴はありますか?
更新:私たちが目指している動作は次のとおりです。
- クラス プロパティは、定義した自然な順序で最初に比較されます。
- 2 つのオブジェクトの特定のプロパティが同等である場合、次の順序に進みます。
- すべてのプロパティが等しい場合、 の場合にのみ 0 を返します
this.equals(obj)
。