测试代码(只是为了遵守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中的“强烈建议”suggested:
强烈建议,但并非严格要求(x.compareTo(y)== 0)==(x.equals(y))。
是否可以在equals()
内使用compareTo()
?当然,我们确保equals()
不会回复compareTo()
。
答案 0 :(得分:2)
只要你在compareTo()中调用equals()之前进行NPE检查就应该没问题。
在做
之前还有一点test.toLowerCase().compareTo(o.test.toLowerCase());
你还必须检查test是否为NULL,因为“someString”。compareTo((String)null)将抛出NullPointerException。