Компаратор <String>должен переопределить метод суперкласса - PullRequest
9 голосов
/ 28 августа 2011

Я делаю TreeMap<String, String> и хочу заказать его по убыванию.Я создал следующий компаратор:

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

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

Я строю TreeMap следующим образом:

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

Однако я получаю следующую ошибку:

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

Я никогда полностью не брал дженерики, что я делаю не так?

Ответы [ 3 ]

19 голосов
/ 29 августа 2011

Ваш проект Eclipse, очевидно, настроен на Java 1.5.В этом случае аннотация @Override действительно не поддерживается в интерфейсных методах.Удалите эту аннотацию или установите уровень соответствия вашего проекта на Java 1.6.

7 голосов
/ 29 августа 2011

Вам не нужно писать пользовательский Comparator, если вы просто хотите изменить естественный (восходящий) порядок.

Чтобы получить нисходящий порядок, используйте:

myMap = new TreeMap<String, String>(java.util.Collections.reverseOrder());
1 голос
/ 29 августа 2011

Ах, я нашел проблему.При создании нового анонимного экземпляра Comparable я не переопределяю методы интерфейсов ... Я их реализую.Директива @Override была проблемой.Метод compare () не переопределял существующий метод, он реализовывал часть интерфейса.Я скопировал этот код из другого места, и он не должен был иметь @ Override.

...