Java 8 | 方法引用
方法引用使得開發者可以直接引用現存的方法、Java
類的構造方法或者實例對象。方法引用和Lambda
表達式配合使用,使得Java
類的構造方法看起來緊湊而簡潔,沒有很多複雜的模板代碼。
方法引用使用一對冒號::
。
下面,我們在Car
類中定義了4
個方法作為例子來區分Java
中4
種不同方法的引用。
1 | public static class Car { |
第一種方法引用的類型是構造器引用,語法是Class::new
,或者更一般的形式:Class<T>::new
。注意:這個構造器沒有參數。
1 | final Car car = Car.create( Car::new ); |
第二種方法引用的類型是靜態方法引用,語法是Class::static_method
。注意:這個方法接受一個Car
類型的參數。
1 | cars.forEach( Car::collide ); |
第三種方法引用的類型是某個類的成員方法的引用,語法是Class::method
,注意,這個方法沒有定義入參:
1 | cars.forEach( Car::repair ); |
第四種方法引用的類型是某個實例對象的成員方法的引用,語法是instance::method
。注意:這個方法接受一個Car
類型的參數:
1 | final Car police = Car.create( Car::new ); |
運行上述例子,可以在控制台看到如下輸出(Car
實例可能不同):
1 | Collided com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d |
註:更詳細的內容,可以參考官方文件
方法引用實例
1 | import java.util.List; |
輸出的結果為:
1 |
|
註:以上參考了
Java 8 Lambda新語法,簡化程式,增強效能
Java 8 新特性
Java 8的新特性—终极版
现代化 Java - Java8 指南