1. 程式人生 > >java8 labmbda表示式方法引用

java8 labmbda表示式方法引用

比圖Integer::intValue,作為函式傳遞。。。這就是方法引用

Function類的只有一個抽象方法,即:R apply(T)

當使用Function作為方法引數時,如下:

public <R> R map(Function<T, R> function) {
    return function.apply(t);
}

呼叫該方法的時候,傳遞的是Integer.intValue的方法引用,如下:

LambdaTest<Integer> lambdaTest = new LambdaTest<>(123);
int integer = lambdaTest.map(Integer::intValue);

這個時候想當與重寫了Function介面,在apply方法內部呼叫Integer的intValue方法,即相當於lambda表示式:

LambdaTest<Integer> lambdaTest = new LambdaTest<>(123);
//新增下面這一行
Function<Integer,Integer> function=t->t.intValue();
int integer = lambdaTest.map(function);

然後相當於匿名內部類的程式碼如下:

LambdaTest<Integer> lambdaTest = new LambdaTest<>(123);
Function<Integer,Integer> function=new Function<Integer, Integer>() {
    @Override
    public Integer apply(Integer integer) {
        return integer.intValue();
    }
};
int integer = lambdaTest.map(function);

所以說,不論是lambda表示式還是方法引用,都是相當於在匿名內部類重寫的方法中呼叫該lambbda表示式或者引用的方法

參考自:https://blog.csdn.net/wonking666/article/details/79208863