繁体   English   中英

java 8中的lambda特性如何工作?

[英]How does this lambda feature in java 8 work?

我正在尝试使用java 8功能。 在阅读官方教程时,我遇到了这段代码

static void invoke(Runnable r) {
    r.run();
}

static <T> T invoke(Callable<T> c) throws Exception {
    return c.call();
}

并且有一个问题:

将在以下语句中调用哪种方法?“

String s = invoke(() -> "done");

并回答它

invoke(Callable<T>)方法invoke(Callable<T>)因为该方法返回一个值; 方法invoke(Runnable)没有。 在这种情况下,lambda表达式() -> "done"Callable<T>

据我所知,因为invoke应该返回一个String ,它会调用Callable的调用。 但是,不确定它是如何工作的。

我们来看看lambda

invoke(() -> "done");

事实上你只有

"done"

使lambda 值兼容 lambda的主体,似乎不是一个可执行语句,隐含地变成了

{ return "done";} 

现在,由于Runnable#run()没有返回值而Callable#call()没有,后者将被选中。

说你写了

invoke(() -> System.out.println());

相反,lambda将被解析为Runnable类型的实例,因为没有可以用作返回值的表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM