有没有人将Lambda Expressions移植到Java 7?
读了Java 8从lambdas中产生的字节码types后 ,我想起Java 5发布的时候了。 那时候有Retroweaver和其他工具来转换用JDK 5编译的字节码以在JRE 1.4上运行。
有没有人为Java 8 lambdas创build了这样的backporting工具? Java开发人员现在就可以开始使用lambdas生产品质的Java 7 JRE,而不必等待Java 8 GA版本的6-12个月。
这里是我的分析,为什么像backporter应该可以相对容易地实现:
Java 8 lambdas似乎没有使用Java 7不具备的任何JVM特性(例如invokedynamic
), java.lang.invoke.LambdaMetafactory
类及其依赖关系看起来像纯Java,所以应该可以实现它们在第三方库中。 因此,使用JDK 8编译的字节码可以通过添加第三方库和LambdaMetafactory副本(位于不同的包中)并通过转换字节码来使用该元数据库来运行JRE 7。 也许还会生成一些合成类和方法来绕过可访问性检查,就像java.lang.invoke.MagicLambdaImpl
似乎暗示的那样。 或者为所有lambda生成匿名内部类,就像第一个启用了lambda的Early Access JDK所做的那样。
现在有了Retrolambda来转换使用lambdaexpression式和方法引用的Java 8字节码来处理Java 7,6或5(Java 1.4提供了validation错误;没有进一步调查)。