spring源碼閱讀過程中的收穫
- @FunctionalInterface 函數式接口,函數式接口,首先是一個接口,然後就是在這個接口裏面只能有一個抽象方法。
@FunctionalInterface
public interface ContextInitialize
{
void doIt(String param);
}
更多相關的介紹請看這篇博客https://www.cnblogs.com/runningTurtle/p/7092632.html
- jdk8中的新特性 :: 語法糖,可以獲取某個類中的函數對象,在下面的例子中:this::initialize 就是取得了initialize(String param)函數對象。也可以用 類名::函數名 獲取靜態函數
- 然後聲明的函數式接口可以用來承接匿名的lambda表達式,在jdk8中也可以用來承接 :: 獲取到的函數。
public class Java8NewTest {
private List<String> dataList = Arrays.asList("Tom", "ToKa", "YoXiNo");
public void callInitialize() {
//ContextInitialize爲聲明的函數式接口
//等同於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);
}
}
- 調用方法如下
public class RunClass {
public static void main(String []args){
Java8NewTest java8NewTest = new Java8NewTest();
java8NewTest.callInitialize();
}
}