2011-08-28 4 views
9

私はTreeMap<String, String>を作成しており、降順で注文したいと考えています。しかし、私は次のエラーを取得していますコンパレータ<String>はスーパークラスメソッドをオーバーライドする必要があります

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

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

私は決してきていない、私はそうのようなのTreeMapを構築

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

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

:私は、次のコンパレータを作成しました完全にgrokedジェネリック、私は間違って何ですか?

+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

ああ、非常に便利な便利な方法!ありがとう! –

関連する問題