java8 labmbda表示式方法引用
阿新 • • 發佈:2018-11-27
比圖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