有没有人将Lambda表达式向后移植到Java 7?

时间:2013-07-19 22:41:51

标签: java lambda java-7 java-8 backport

阅读what kind of bytecode Java 8 produces from lambdas,我想起了Java 5发布的时间。当时有Retroweaverother tools用于将使用JDK 5编译的字节码转换为在JRE 1.4上运行。

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

以下是我对后向运营商应该相对容易实现的原因的分析:

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

1 个答案:

答案 0 :(得分:44)

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