Использование 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), обновите свой проект и что он.. надеюсь, что эта помощь