2011-08-28 2 views
9

나는 TreeMap<String, String>을 만들고 있는데 내림차순으로 주문하고 싶습니다.비교 자 <String>은 수퍼 클래스 메서드를 오버라이드해야합니다.

Comparator<String> descender = new Comparator<String>() { 

    @Override 
    public int compare(String o1, String o2) { 
     return o2.compareTo(o1); 
    } 
}; 

내가 이렇게 같은 트리 맵을 구축 : 나는 다음과 비교기 만들어

The method compare(String, String) of type new Comparator<String>(){} must override a superclass method 

내가 적이 없다 : 그러나

myMap = new TreeMap<String, String>(descender);

을, 나는 다음과 같은 오류를 받고 있어요 완전히 groked 제네릭, 내가 뭘 잘못하고있어?

+1

내가 볼 수있는 한, 아무 것도. 비교 메서드가 Comparator의 compare() 메서드의 서명과 일치하지 않는 경우 오류가 발생하지만, 이는 내가 볼 수있는 한 대소 문자가 아닙니다. – fwielstra

답변

17

이클립스 프로젝트는 분명히 자바 1.5로 설정되어 있습니다. 그러면 인터페이스 메서드에서 @Override 주석이 실제로 지원되지 않습니다. 해당 주석을 제거하거나 프로젝트 준수 수준을 Java 1.6으로 수정하십시오.

+0

좋은 추측. –

1

아, 문제가 발견되었습니다. Comparable의 새로운 익명 인스턴스를 인스턴스화 할 때 인터페이스 메서드를 재정의하지는 않습니다 ... 구현하고 있습니다. @Override 지시문이 문제였습니다. compare() 메서드가 기존 메서드를 재정의하지 않고 인터페이스의 일부를 구현하고있었습니다. 다른 곳에서 코드를 복사했는데 @Override가 없어야합니다.

+3

프로젝트가 1.5 소스 레벨로 설정되었을 수 있습니다. 1.6 이후로는 인터페이스에 의해 지정된 메소드에'@ Override'라는 주석을 달 수 있습니다. –

7

자연스러운 (오름차순) 순서 만 바꾸려면 Comparator 사용자 정의를 쓸 필요가 없습니다.

가 하강 순서를 얻으려면 바로 사용

myMap = new TreeMap<String, String>(java.util.Collections.reverseOrder()); 
+0

아, 아주 좋은 편의 방법! 감사! –

관련 문제