在compareTo()中使用equals()?

时间:2013-09-06 11:50:04

标签: java equals compareto

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

类似:When to include what?

1 个答案:

答案 0 :(得分:2)

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

在做

之前还有一点
test.toLowerCase().compareTo(o.test.toLowerCase());

你还必须检查test是否为NULL,因为“someString”。compareTo((String)null)将抛出NullPointerException。