【发布时间】:2014-07-24 20:51:17
【问题描述】:
是否有人知道任何工具可以将使用 lambda 和方法引用的 Java 8 代码(在源代码级别)转换为使用匿名内部类的 Java 7 代码? 我知道Retrolambda,但这适用于字节码级别,而不是源级别。
目前,我有一个可用作 IntelliJ 插件的版本。 我扩展了当前的 IntelliJ 代码以一次性转换包中的所有 lambda,而不是 selecting each lambda individually and converting to anonymous inner class。 但是,这种方法的问题在于它不能作为独立工具工作,比如 maven 插件,因为它需要 IntelliJ 上下文才能工作。
编辑:请注意,重点是将 lamda/方法引用转换为匿名内部类。我不担心 Java 8 中的 API 更改会被 Java 7 编译器捕获并报告为编译错误。
【问题讨论】:
-
小心。 Java 8 引入了许多在 Java 7 中不可用的新 API。将 lambdas 更改为匿名内部类可能不是唯一需要迁移的东西。
-
@unholysampler 是的,我知道这一点。在我的用例中,我们不必担心 Java 8 中的新 API 更改。最坏的情况是,Java 7 编译器会抛出编译错误,以便用户修复代码。
-
是的,你需要一个反向移植的流 api 和反向移植的 java.util.function
-
还有一种处理默认方法的方法。
-
@StuartMarks 我们需要另一个“定制器”工具来将默认方法移动到实现类:)
标签: java lambda java-7 java-8 inner-classes