2 回答

TA貢獻1898條經(jīng)驗 獲得超8個贊
規(guī)范中明確定義,如果 lambda 的主體是語句表達式,如果返回類型為 void,則結(jié)果將被丟棄
15.27.3。Lambda 表達式的類型
如果 lambda 的主體是語句表達式(即允許單獨作為語句的表達式),則它與產(chǎn)生 void 的函數(shù)類型兼容;任何結(jié)果都會被簡單地丟棄。因此,例如,以下兩者都是合法的:
?//Predicate?has?a?boolean?result ???Predicate<String>?p?=?s?->?list.add(s); ???//?Consumer?has?a?void?result ???Consumer<String>?c?=?s?->?list.add(s);
一般來說, 形式的 lambda?
() -> expr
(其中 expr 是語句表達式)被解釋為 或() -> { return expr; }
,() -> { expr; }
具體取決于目標類型。

TA貢獻1863條經(jīng)驗 獲得超2個贊
中定義的單個抽象方法的返回類型定義了FunctionalInterfacelambda 的推斷方式。例如,Consumer<String>示例中的共享可以表示為匿名類,例如:
// Consumer<String> consumer = s -> s.isEmpty();
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
s.isEmpty(); // treated as void here
}
};
表示為 a 的相同 lambda 表達式Predicate<String>可以轉(zhuǎn)換為匿名類,例如:
// Predicate<String> predicate = s -> s.isEmpty();
Predicate<String> predicate = new Predicate<String>() {
@Override
public boolean test(String s) {
return s.isEmpty(); // returns boolean here
}
};
添加回答
舉報