在 Java 中,方法引用可用於建立函數式介面。例如,Consumer 介面採用單一參數並對其執行操作。令人驚訝的是,具有傳回類型的方法引用也可以與 Consumer 介面相符。
允許這種行為的決定是基於以與呼叫方式類似的方式使方法適應功能介面的想法。具體來說,任何有返回值的方法都可以適應 Consumer 接口,即使返回值被忽略。
關於 lambda 表達式,有兩種形式: (args) ->;表達式和(args)-> { 語句* }。如果沒有程式碼路徑嘗試傳回值,則後一種形式可以是 void 相容的。如果表達式求值為一個值,則前一種形式是值相容的。但是,如果表達式也是一個語句(例如方法呼叫或遞增/遞減運算子),則它可以是 void 相容的。
例如,表達式 s -> s 是值相容的,而 s -> i 是空相容的。這是因為遞增/遞減運算子可以單獨用作語句。另一個與 void 相容的表達式是 s -> newWhatever(s),因為類別實例建立表達式也可以用作語句。
有趣的是, (arg) -> methodReturningVoid(arg) 是唯一不值相容的表達式形式。
以上是為什麼帶回傳類型的方法引用可以實現Java中的消費者介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!