...
The implementor must ensure sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
for all x and y. (This implies that x.compareTo(y)
must throw an exception iff y.compareTo(x)
throws an exception.)
The implementor must also ensure that the relation is transitive: (x.compareTo (y) >0 && y.compareTo(z)>0)
implies x.compareTo(z)>0
.
Finally, the implementor must ensure that x.compareTo (y) ==0
implies that sgn(x.compareTo(z)) == sgn(y.compareTo(z))
, for all z.
It is strongly recommended, but not strictly required that (x.compareTo (y) ==0) == (x.equals (y) )
. Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact. The recommended language is "Note: this class has a natural ordering that is inconsistent with equals."
...
MET34-EX1: In some situations it may be necessary to violate the condition that (x.compareTo (y) ==0) == (x.equals (y) )
. However, as this will make an object Comparable that should not be used in most data structures that deal with Comparable objects like TreeSet
and TreeMap
, it would be better to use a separate method entirely. If compatibility issues demand the use of this non-standard compareTo()
method, care should be taken through comments or other means that the object is not used in data structures that expect a standard Comparable
.
...