【问题标题】:Comparator<String> must override super class methodComparator<String> 必须覆盖超类方法
【发布时间】:2011-08-28 19:57:29
【问题描述】:

我正在制作TreeMap&lt;String, String&gt; 并希望以降序方式订购它。我创建了以下比较器:

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

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

我这样构造 TreeMap:

myMap = new TreeMap&lt;String, String&gt;(descender);

但是,我收到以下错误:

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

我从来没有完全理解过泛型,我做错了什么?

【问题讨论】:

  • 据我所知,什么都没有。如果您的 compare 方法与 Comparator 的 compare() 方法的签名不匹配,则会导致该错误,但据我所见,情况似乎并非如此。

标签: java generics map comparator treemap


【解决方案1】:

您的 Eclipse 项目显然设置为 Java 1.5。接口方法确实不支持 @Override 注释。删除该注释或将项目的合规级别修复为 Java 1.6。

【讨论】:

【解决方案2】:

如果您只想反转自然(升序)顺序,则无需编写自定义 Comparator

要获得降序,只需使用:

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

【讨论】:

  • 哦,很方便的方法!谢谢!
【解决方案3】:

啊,我发现了问题。在实例化 Comparable 的新匿名实例时,我没有覆盖接口方法......我正在实现它们。 @Override 指令是问题所在。 compare() 方法没有覆盖现有方法,它正在实现接口的一部分。我从另一个地方复制了该代码,它不应该有@Override。

【讨论】:

  • 您的项目可能设置为 1.5 源代码级别。从 1.6 开始,您也可以使用 @Override 注释接口指定的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2014-08-28
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
相关资源
最近更新 更多