Java8新特性整理之方法引用
阿新 • • 發佈:2018-11-07
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)。
圖片來自《Java 8 In Action》
上圖為三種不同型別的Lambda表示式構建方法引用的辦法。
你可以把方法引用看作針對僅僅涉及單一方法的Lambda的語法糖。
總結下:
- 跟Lambda表示式比起來,方法引用的可讀性更好 。
- 儘量將複雜的Lambda表示式抽象到普通方法中,然後作為行為引數傳遞(方法引用)。