2

测试代码(只是为了遵守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()

类似:什么时候包括什么?

4

1 回答 1

2

只要在 compareTo() 中调用 equals() 之前进行 NPE 检查,应该没问题。

还有一点是在做之前

test.toLowerCase().compareTo(o.test.toLowerCase());

您还必须检查 test 是否为 NULL,因为 "someString".compareTo((String)null) 将引发 NullPointerException。

于 2013-09-06T11:58:49.757 回答