比图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