2013-09-06 2 views
1

테스트 코드compareTo()에서 equals() 사용?

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(); 
    } 
} 

말은, 난에서 '강력 추천'suggested을 따라 Comparable를 구현하는 내 수업을 원하는 (방금 분명히 자신의 대소 문자를 구분 데이터 모델을 일으키고 더 나은 방법이있다, SSCCE을 준수합니다) API :

그것은 적극 권장하지만, 엄격하게 필요하지 않은 것을 (x.compareTo (Y) == 0) == (x.equals (y))는.

equals() 안에 compareTo()을 사용 하시겠습니까? 물론 equals()compareTo()으로 전화하지 않습니다. 유사

: 당신은 compareTo() 안의 등호를 호출하기 전에 NPE 확인을하고 있습니다로 When to include what?

+0

compareTo()에서 equals()를 사용하고 equals() 또는 compareTo()를 사용하는 경우에 대해서는 설명하지 않습니다. ;) 또한 String 클래스에서 equals() 및 compareTo()를 구현하지 않았으므로 여기서 범위를 벗어납니다. 테스트 코드는 compareTo()에서 equals()를 사용하는 방법을 실제로 시각화하는 것입니다. –

+0

괜찮습니다. 그런데 :'a? 사실 : b? c : 거짓 '. 그것은'a || '에 대한 모호한 표현입니다. b && c'. 나. 돌아 오 == 이건 || instanceof TestClass && test.equalsIgnoreCase (((TestClass) o) .test)'같은 작업을 수행합니다. – Holger

+0

그 점을 발견해 주셔서 감사합니다! :) 나는 진실/틀린 것을 타이핑 할 때 뭔가 비린내가 있다는 것을 알았다. –

답변

1

는만큼 확인을해야(). 당신은 또한 의지가 NullPointerException이 발생 시험 때문에 "someString".compareTo ((문자열) 널 (null))이 NULL인지 확인해야한다

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

을하기 전에

또 하나의 포인트가 될 것입니다.

+0

그 점을 발견해 주셔서 감사합니다! :) –