我使用的是Java 8 Update 20 32位,Maven 3.2.3,Eclipse Luna Build id:20140612-0600 32位.
在开始使用lambdas之后,我的项目中的一些类开始报告maven(mvn compile)中的编译错误.
只有在我使用lambdas时才会出现这些错误.如果我切换回匿名类,错误就消失了.
我可以通过一个简单的测试用例重现错误:
package br;
import java.awt.Button;
import java.awt.Panel;
public class Test {
private final Button button;
private final Panel panel;
public Test() {
button = new Button();
button.addActionListener(event -> {
System.out.println(panel);
});
panel = new Panel();
}
}
Run Code Online (Sandbox Code Playgroud)
我这样编译:
mvn clean;mvn compile
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
[ERROR] /C:/Users/fabiano/workspace-luna/Test/src/main/java/br/Test.java:[14,44] variable panel might not have been initialized
Run Code Online (Sandbox Code Playgroud)
虽然错误信息非常清楚发生了什么(编译器认为最终变量panel在实例化之前被调用),但是在按钮生成动作之前不会调用变量,以及我们怎么也不能说动作何时会发生,代码应该编译.实际上,如果我不使用lambda,它会按照它应该编译:
package br;
import java.awt.Button;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public …Run Code Online (Sandbox Code Playgroud)