2011-08-28 77 views
9

我在做一個TreeMap<String, String>並且想要以降序方式訂購它。我創建了以下比較:比較器<String>必須重寫超類方法

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

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

我構建樹形圖如下所示:

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

不過,我發現了以下錯誤:

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

我從來完全氾濫的泛型,我做錯了什麼?

+1

據我所見,什麼都沒有。如果您的比較方法與Comparator的compare()方法的簽名不匹配,則會導致錯誤,但根據我的情況看來並不是這樣。 – fwielstra

回答

17

Eclipse項目顯然是設置爲Java 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

哦,非常好的方便方法!謝謝! –

相關問題