2011-08-28 83 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

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

相关问题