spring源碼閱讀過(guò)程中的收獲
- @FunctionalInterface 函數(shù)式接口朴读,函數(shù)式接口,首先是一個(gè)接口走趋,然后就是在這個(gè)接口里面只能有一個(gè)抽象方法衅金。
@FunctionalInterface
public interface ContextInitialize
{
void doIt(String param);
}
更多相關(guān)的介紹請(qǐng)看這篇博客https://www.cnblogs.com/runningTurtle/p/7092632.html
- jdk8中的新特性 :: 語(yǔ)法糖,可以獲取某個(gè)類(lèi)中的函數(shù)對(duì)象簿煌,在下面的例子中:this::initialize 就是取得了initialize(String param)函數(shù)對(duì)象氮唯。也可以用 類(lèi)名::函數(shù)名 獲取靜態(tài)函數(shù)
- 然后聲明的函數(shù)式接口可以用來(lái)承接匿名的lambda表達(dá)式,在jdk8中也可以用來(lái)承接 :: 獲取到的函數(shù)姨伟。
public class Java8NewTest {
private List<String> dataList = Arrays.asList("Tom", "ToKa", "YoXiNo");
public void callInitialize() {
//ContextInitialize為聲明的函數(shù)式接口
//等同于ContextInitialize contextInitialize = (item) -> System.out.println("initialize: " + item);
ContextInitialize contextInitialize = this::initialize;
//等同于dataList.forEach(item -> contextInitialize.doIt(item));
dataList.forEach(contextInitialize::doIt);
}
private void initialize(String param) {
System.out.println("initialize: " + param);
}
}
- 調(diào)用方法如下
public class RunClass {
public static void main(String []args){
Java8NewTest java8NewTest = new Java8NewTest();
java8NewTest.callInitialize();
}
}