可比較和比較
在實現依賴於 double
的 compareTo(..)
方法時,請不要執行以下操作:
public int comareTo(MyClass other) {
return (int)(doubleField - other.doubleField); //THIS IS BAD
}
由 (int)
強制轉換引起的截斷將導致該方法有時錯誤地返回 0
而不是正數或負數,因此可能導致比較和排序錯誤。
相反,最簡單的正確實現是使用 Double.compare ,如下:
public int comareTo(MyClass other) {
return Double.compare(doubleField,other.doubleField); //THIS IS GOOD
}
自 Java 1.2 以來 ,Comparable<T>
的非通用版本,簡稱 Comparable
。除了與遺留程式碼介面之外,實現通用版本 Comparable<T>
總是更好,因為它不需要在比較時進行轉換。
一個類與其自身相當是非常標準的,如:
public class A implements Comparable<A>
雖然有可能打破這種正規化,但在這樣做時要謹慎。
如果該類實現了 Comparable<T>
,那麼仍然可以在類的例項上使用 Comparator<T>
。在這種情況下,將使用 Comparator
的邏輯; Comparable
實現指定的自然順序將被忽略。