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