Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么增量运算符lambda编译为可运行?_Java_Lambda_Java 8 - Fatal编程技术网

Java 为什么增量运算符lambda编译为可运行?

Java 为什么增量运算符lambda编译为可运行?,java,lambda,java-8,Java,Lambda,Java 8,有以下代码: static int counter = 0; static Callable<?> callable = () -> counter; static Runnable runnable = () -> counter++; static Runnable runnable2 = () -> counter; // DOES NOT COMPILE public static void main(String[] args) throws Ex

有以下代码:

static int counter = 0;

static Callable<?> callable = () -> counter;

static Runnable runnable = () -> counter++;

static Runnable runnable2 = () -> counter; // DOES NOT COMPILE

public static void main(String[] args) throws Exception {
    runnable.run();
    System.out.println(callable.call()); // PRINTS "1"
}
静态整数计数器=0;
静态Callable Callable=()->计数器;
静态Runnable Runnable=()->计数器++;
静态可运行runnable2=()->计数器;//不编译
公共静态void main(字符串[]args)引发异常{
runnable.run();
System.out.println(callable.call());//打印“1”
}
我理解为什么runnable2不编译——因为lambda返回一个值,而runnable没有返回类型(为void)。我也理解为什么可调用编译,它返回计数器变量值,该值通过调用run方法递增。(我知道它是单线程的,但这不是重点)


我不明白的是为什么
runnable
lambda会编译?据我所知,++运算符确实返回一个值-递增的值-为什么编译器会忽略它?

如果您使用的是
method()
,而不是
counter++
,会怎么样?如果
method
返回一个值怎么办?仍然编译。
counter
是一个表达式,
counter++
同时是一个表达式和语句。在副本中,如果您按照
ExpressionStatement
的链接,您将找到增量表达式。旁注:在正常方法中也会发生类似情况:
counter是一个错误,
计数器++正常