[英]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.