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

猜你喜欢

转载自blog.csdn.net/qq_36951116/article/details/84537415
今日推荐