Тестови код (само за да се съобразите с SSCCE, очевидно има много по-добри начини да разклатите собствените си модели на данни, които не са чувствителни към главни и малки букви)
public class TestClass implements java.lang.Comparable<TestClass> {
public String test;
@Override
public int compareTo(TestClass o) {
if (o == null) {
throw new NullPointerException();
}
return equals(o) ? 0 : test.toLowerCase().compareTo(o.test.toLowerCase());
}
@Override
public boolean equals(Object o) {
return (o == this) ? true : o instanceof TestClass ? test.equalsIgnoreCase(((TestClass) o).test) : false;
}
@Override
public int hashCode() {
return test.toLowerCase().hashCode();
}
}
Кажете, искам моят клас, прилагащ Comparable
, да следва „силната препоръка“ предложен в API:
Силно се препоръчва, но не е строго задължително (x.compareTo(y)==0) == (x.equals(y)).
Ще бъде ли добре тогава да използвате equals()
вътре в compareTo()
? Разбира се, гарантираме, че equals()
няма да се обади на compareTo()
в отговор.
Подобно: Кога да включите какво?
a? true: b? c: false
. Това е объркан израз заa || b && c
. Т.е.return o==this || o instanceof TestClass && test.equalsIgnoreCase(((TestClass) o).test)
ще направи същото. - person Holger   schedule 06.09.2013