有没有人将Lambda表达式向后移植到Java 7? [英] Has anybody yet backported Lambda Expressions to Java 7?

查看:474
本文介绍了有没有人将Lambda表达式向后移植到Java 7?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

阅读 Java 8从lambdas生成什么样的字节码,我想起了Java 5发布的时候。当时有 Retroweaver 其他工具用于将使用JDK 5编译的字节码转换为在JRE 1.4上运行。

Reading about what kind of bytecode Java 8 produces from lambdas, it came to my mind the time when Java 5 was released. Back then there was Retroweaver and other tools for converting bytecode compiled with JDK 5 to run on JRE 1.4.

是否有人为Java 8 lambdas创建了这样的后向移植工具?它将让Java开发人员今天开始在生产质量的Java 7 JRE上使用lambdas,而不必等待6到12个月的Java 8 GA版本。

Has anybody yet created such a backporting tool for Java 8 lambdas? It would let Java developers start using lambdas already today on production-quality Java 7 JREs, without having to wait 6-12 months for Java 8's GA release.

这是我对后端程序相对容易实现的原因的分析:

Here is my analysis of why such as backporter should be implementable relatively easily:

Java 8 lambdas似乎没有使用Java 7不具备的任何JVM功能(例如 invokedynamic ), java.lang.invoke.LambdaMetafactory 类及其依赖项看起来像纯Java,所以它应该是可以在第三方库中实现它们。因此,使用JDK 8编译的字节码可以通过添加带有LambdaMetafactory副本的第三方库(在不同的包下)并通过转换字节码来使用该元数据来在JRE 7上运行。也许还会生成一些合成类和方法来绕过可访问性检查,因为 java.lang.invoke.MagicLambdaImpl 似乎意味着。或者为所有lambdas生成匿名内部类,就像一些支持lambda的早期访问JDK一样。

Java 8 lambdas don't seem to use any JVM features that Java 7 wouldn't have (e.g. invokedynamic), and the java.lang.invoke.LambdaMetafactory class and its dependencies look like pure Java, so it should be possible to implement them in a 3rd-party library. Thus bytecode compiled with JDK 8 could be made to run on JRE 7 by adding a 3rd-party library with a copy of LambdaMetafactory (under a different package) and by transforming the bytecode to use that metafactory instead. Maybe also generate some synthetic classes and methods to bypass accessibility checks, as java.lang.invoke.MagicLambdaImpl seems to imply. Or then generate anonymous inner classes for all lambdas, like some of the first lambda-enabled Early Access JDKs did.

推荐答案

现在 Retrolambda 用于转换使用lambda表达式和方法引用的Java 8字节码,以便在Java 7,6或5上工作。(Java 1.4给出了验证错误;没有进一步调查。)

There is now Retrolambda for converting Java 8 bytecode, which uses lambda expressions and method references, to work on Java 7, 6 or 5. (Java 1.4 gave verify errors; did not investigate further.)

这篇关于有没有人将Lambda表达式向后移植到Java 7?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆