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