Использование Java 7 Comparators в Java 8

Ситуация

У меня есть проект OSGi, который я пытаюсь перенести на Java 8. В моем проекте у меня есть зависимости от сторонних библиотек, которые я "OSGi-fied" (просто добавляя файл MANIFEST.MF и помещая метаданные в Это). Эти библиотеки проверяются из репозиториев SVN только для чтения, поэтому я могу просто проверять обновления с тех пор, когда это необходимо, и поэтому я не хочу делать какие-либо другие изменения, кроме как в файле MANIFEST.MF, так как я не может зафиксировать их.

Проблема

Однако эти библиотеки используют множество анонимных компараторов, например:

private static final Comparator heightComparator = new Comparator() {
    public int compare (Object o1, Object o2) {
        return ((Glyph)o1).getHeight() - ((Glyph)o2).getHeight();
    }
};

Теперь, по-видимому, интерфейс java.util.Comparator имеет целую кучу новых методов, которые необходимо реализовать (что, конечно же, приводит к ошибкам компиляции). Но я действительно хочу избежать их реализации или переключиться на лямбда-выражения, потому что изменение исходного источника, скорее всего, приведет к конфликтам каждый раз, когда я проверю более новые версии.

Java, используемая для работы с обратной совместимостью, и мне интересно, почему такая простая и широко используемая часть API требует (относительно) больших усилий для миграции. Я что-то упустил или это действительно неизбежно?

Ответы

Ответ 1

Новые методы в версии 8 для Java 8 Comparator - это методы по умолчанию (новая функция в Java 8), которые включают не только подпись метода, но и реализацию по умолчанию. Таким образом, более старые реализации Comparator должны работать отлично на Java 8, если они раньше работали.

Если что-то не работает, сообщите нам, что вы пытаетесь и что такое сообщение об ошибке.

Ответ 2

У меня была аналогичная проблема, такая как thobens: Обновлен мой Kepler 4.2.3, чтобы использовать Java 8, установить JAVA 8 в качестве новой JRE и т.д. Как и thobens, я получил ошибку на компараторах с помощью eclipse, требуя от меня реализовать все нереализованные методы.

Наконец, это было вызвано старым компилятором компиляционного уровня (1.7) - переход на 1.8 решил эту проблему.

Ответ 3

потому что для java 7 у Компаратора не было всех других методов, когда вы обновляете Eclipse до Java 1.8, тогда вам нужны новые методы, чтобы использовать Comparator, чтобы решить это, просто изменив Compiler на Java 1.7 ( свойства - Компилятор Java --- Соответствие JDK), обновите свой проект и что он.. надеюсь, что эта помощь