メソッドがすでにクラスに実装されているのに、なぜequals()
メソッドが抽象化されたのですか?java.util.Comparator
Object
質問する
151 次
1 に答える
5
まず、メソッドが「抽象化」されていないことに注意してください。を実装Comparator<T>
せずに実装するequals()
と、コードはコンパイルされます。クラスは、 によって提供される実装を使用するだけObject
です。
メソッドを再宣言する理由については、 の契約がComparator<T>.equals()
の契約よりも厳しいためObject.equals()
です。これはドキュメントで説明されています:
さらに、このメソッドは、指定されたオブジェクトがコンパレーターでもあり、このコンパレーターと同じ順序を課す場合にのみ true を返すことができます。したがって、comp1.equals(comp2) は、すべてのオブジェクト参照 o1 および o2 に対して sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2)) を意味します。
Comparator
がオーバーライドされていない場合、のコントラクトが のコントラクトと異なるequals()
ことを指定する適切な方法はありません。equals()
Object
于 2013-03-04T13:10:00.187 に答える