Подтвердить что ты не робот

Кто-нибудь еще поддерживал Лямбду-выражения на Java 7?

Читая о какой тип байт-кода Java 8 генерирует из lambdas, мне пришло в голову время, когда была выпущена Java 5. Тогда было Retroweaver и другие инструменты для преобразования байт-кода, скомпилированного с JDK 5, для запуска на JRE 1.4.

Кто-нибудь еще создал такой инструмент для backporting для Java 8 lambdas?. Это позволило бы разработчикам Java начать использовать lambdas уже сегодня на Java-JRE класса качества, без необходимости ждать 6-12 месяцев для Выпуск Java 8 GA.

Вот мой анализ того, почему репортер должен быть реализован относительно легко:

Java 8 lambdas, похоже, не используют никаких JVM-функций, которые Java 7 не будет иметь (например, invokedynamic), а класс java.lang.invoke.LambdaMetafactory и его зависимости выглядят как чистая Java, поэтому должно быть возможно реализовать их в сторонней библиотеке. Таким образом, байт-код, скомпилированный с JDK 8, может быть запущен на JRE 7, добавив стороннюю библиотеку с копией LambdaMetafactory (под другим пакетом) и путем преобразования байт-кода для использования этой метафайлы. Может быть, также генерировать некоторые синтетические классы и методы, чтобы обойти проверки доступности, как это подразумевает java.lang.invoke.MagicLambdaImpl. Или затем создайте анонимные внутренние классы для всех lambdas, как и некоторые из первых JDK с ранним доступом с возможностью лямбда.

4b9b3361

Ответ 1

Теперь существует Retrolambda для преобразования байт-кода Java 8, который использует лямбда-выражения и ссылки на методы, для работы на Java 7, 6 или 5. (Java 1.4 дал ошибки проверки, не исследовал далее.)