簡體   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