新特性5-方法引用

方法引用使得開發(fā)者可以直接引用現(xiàn)存的方法、Java類的構(gòu)造方法或者實(shí)例對(duì)象。方法引用和Lambda表達(dá)式配合使用,使得java類的構(gòu)造方法看起來(lái)緊湊而簡(jiǎn)潔,沒(méi)有很多復(fù)雜的模板代碼。

語(yǔ)法:
如果是靜態(tài)方法,則是ClassName::methodName。如 Object ::equals
如果是實(shí)例方法,則是Instance::methodName。如Object obj=new Object();obj::equals;
構(gòu)造函數(shù),則是ClassName::new

package com.ehking.example.java8.newfeature.demo05;

import java.util.function.Supplier;

/**
 * Created by shiyanwu on 2017/4/13.
 * Car類定義
 */
public class Car {

    public static Car create(final Supplier<Car> supplier) {
        return supplier.get();
    }

    public static void collide(final Car car) {
        System.out.println("Collided " + car.toString());
    }

    public void follow(final Car another) {
        System.out.println("Following the " + another.toString());
    }

    public void repair() {
        System.out.println("Repaired " + this.toString());
    }
}

引用的car測(cè)試?yán)樱?/p>

package com.ehking.example.java8.newfeature.demo05;

import java.util.Arrays;
import java.util.List;

/**
 * Created by shiyanwu on 2017/4/13.
 * java 測(cè)試 方法引用
 */
public class Java8MethodRef {

    public static void main(String[] args) {
        //第一種方法引用的類型是構(gòu)造器引用,語(yǔ)法是Class::new,或者更一般的形式:Class<T>::new。注意:這個(gè)構(gòu)造器沒(méi)有參數(shù)。
        final Car car = Car.create(Car::new);
        final List<Car> cars = Arrays.asList(car);

        //第二種方法引用的類型是靜態(tài)方法引用,語(yǔ)法是Class::static_method。注意:這個(gè)方法接受一個(gè)Car類型的參數(shù)。
        cars.forEach(Car::collide);

        //第三種方法引用的類型是某個(gè)類的成員方法的引用,語(yǔ)法是Class::method,注意,這個(gè)方法沒(méi)有定義入?yún)ⅲ?        cars.forEach(Car::repair);

        //第四種方法引用的類型是某個(gè)實(shí)例對(duì)象的成員方法的引用,語(yǔ)法是instance::method。注意:這個(gè)方法接受一個(gè)Car類型的參數(shù):
        final Car police = Car.create(Car::new);
        cars.forEach(police::follow);
      
       //Collided com.ehking.example.java8.newfeature.demo05.Car@4c98385c
       //Repaired com.ehking.example.java8.newfeature.demo05.Car@4c98385c
       //Following the com.ehking.example.java8.newfeature.demo05.Car@4c98385c
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容