有人知道有什么工具可以将使用lambda和方法引用的Java8代码(在源代码级别)转换为使用匿名内部类的Java7代码吗?我知道Retrolambda,但它工作在字节码级别,而不是源代码级别。
目前,我有一个可以作为IntelliJ插件工作的版本。我扩展了当前的IntelliJ代码,以一次性转换包中的所有lambda,而不是selecting each lambda individually and converting to anonymous inner class。然而,这种方法的问题是它不能作为一个独立的工具工作,比如一个maven插件,因为它需要一个IntelliJ上下文才能工作。
编辑:请注意,重点是将lamda/方法引用转换为匿名内部类。我不关心Java 8中的API更改,这些更改会被Java 7编译器捕获并报告为编译错误。
发布于 2014-08-11 17:44:51
在IntelliJ Idea中,打开“项目结构”,然后将“项目语言级别”设置为7.0。如果需要的话,再次分析你的代码。这在大多数情况下都会有帮助,但更倾向于逐类(逐个文件)地执行。
发布于 2017-04-01 00:44:20
你可以试试this。这是一个人的概念验证,可以做一些接近你所要求的事情:
它可以将带有lambda初始化器的函数接口的变量声明转换为匿名内部类。
例如:
Callable<String> callable = () -> "abc" ;
// Converted to:
Callable<String> callable = new Callable<String>() {
public String call() throws java.lang.Exception {
return "abc";
}
};我不知道它是否可以转换匿名lambda(即那些未声明为变量的lambda)或方法引用(例如Person::compareByAge)或闭包(局部变量捕获),但如果需要,这些功能可能是您可以扩展他的代码来实现的。
作者指出,“距离功能完整还有很长的路要走,但它是可用的……”
https://stackoverflow.com/questions/24943726
复制相似问题