1. 程式人生 > >Java8新特性整理之方法引用

Java8新特性整理之方法引用

Java8新特性整理之方法引用

方法引用語法

目標引用 ::方法的名稱
  • 1

例子

擷取字串的Lambda表示式

(str, i) -> str.substring(i) 
  • 1

等效的方法引用

String::substring
  • 1

方法引用讓你可以重複使用現有的方法定義,並像Lambda一樣傳遞它們.

構建方法引用

方法引用主要有三類:
- 指向靜態方法的方法引用(例如Integer的parseInt方法,寫作Integer::parseInt)。
- 指向任意型別例項方法的方法引用(例如 String 的 length 方法,寫作
String::length)。
- 指向現有物件的例項方法的方法引用(假設你有一個區域性變數expensiveTransaction
用於存放Transaction型別的物件,它支援例項方法getValue,那麼你就可以寫expensive-
Transaction::getValue)。

Lambda表示式構建方法引用的辦法
圖片來自《Java 8 In Action》

上圖為三種不同型別的Lambda表示式構建方法引用的辦法。

你可以把方法引用看作針對僅僅涉及單一方法的Lambda的語法糖。

總結下:
- 跟Lambda表示式比起來,方法引用的可讀性更好 。
- 儘量將複雜的Lambda表示式抽象到普通方法中,然後作為行為引數傳遞(方法引用)。