Java Lambda表达式找不到符号
这里没有什么奇怪的: 2类。java和Lambdas.javaJava Lambda表达式找不到符号,java,lambda,java-8,Java,Lambda,Java 8,这里没有什么奇怪的: 2类。java和Lambdas.java public class Lambdas { public static void main(String[] args) { new Lambdas().start(); } public void start(){ Interface f = () -> Interface{System.out.println("test");} } } public interface Interfa
public class Lambdas {
public static void main(String[] args) {
new Lambdas().start();
}
public void start(){
Interface f = () -> Interface{System.out.println("test");}
}
}
public interface Interface {
void test();
}
我在主线程java.lang.RuntimeException中得到错误:异常:不可编译的源代码-找不到符号
符号:变量接口
位置:类lambdas.lambdas。
我不知道为什么
p.S.刚从2014 Java Day回来,我用了他们的例子——用netbeans,你的语法是错误的
Interface f = () -> System.out.println("test");
@大卫康拉德不,你没有。@大卫康拉德不,你是对的,这是必要的。我还惊讶地发现它发生了变化。@DavidConrad JLS仍然非常清楚地指出lambda主体是单个表达式或块,因此编译器比规范更具权限。即使方法返回void,方法调用也是“单个表达式”。在根据Java语言的语法解析源代码时,返回类型之类的东西并不重要,它们将在后面的步骤中进行评估:“如果函数类型的结果为void,则lambda主体为语句表达式或void兼容块。”方法调用为“语句表达式”。正确阅读正式规范可能会非常棘手……我发现一个邮件列表表明我的理解至少已经过时两年了,所以再次感谢assylias纠正我的错误!从2012年6月6日开始:下一个EDR将包括对void方法作为表达式体的支持