测试代码(只是为了遵守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()
。
类似:什么时候包括什么?