有没有人将Lambda表达式向后移植到Java 7?
读到Java 8从lambdas产生什么样的字节码,我想到了Java 5发布的时候。当时有Retroweaver和其他工具,用于转换用JDK 5编译的字节码以在JRE 1.4上运行。
有没有人为Java 8 lambdas创建过这样的向后移植工具?它将允许Java开发人员今天开始在生产质量的Java 7 JRE上使用lambda,而不必等待6-12个月才能发布Java 8的GA版本。
以下是我对为什么像backporter这样的应该相对容易实现的分析:
Java 8 lambdas似乎没有使用Java 7不具备的任何JVM功能(例如),并且该类及其依赖项看起来像纯Java,因此应该可以在第三方库中实现它们。因此,使用JDK 8编译的字节码可以通过添加带有LambdaMetafactory副本的第三方库(在不同的包下)并通过转换字节码来使用该元工厂来使JRE 7上运行。也许还会生成一些综合类和方法来绕过可访问性检查,这似乎暗示了这一点。或者为所有 lambda 生成匿名内部类,就像一些第一批启用了 lambda 的抢先体验 JDK 所做的那样。invokedynamic
java.lang.invoke.LambdaMetafactory
java.lang.invoke.MagicLambdaImpl