注:寫這個文檔只是爲了方便加深記憶,增強理解,重點關注兩個default方法中泛型【V】。linux
JDK8做爲一個還在維護階段的長期版本,勢必會在企業應用中佔據至關大的市場份額,因此仍是以JDK8做爲例子的背景。(下一個長期版本是今年9月發佈的JDK11)app
函數接口定義:ide
Interface Function<T,R>函數
這裏稍稍說明一下接口中的<T,R>泛型的含義spa
接口內還有第三個泛型,重點關注接口
接口中定義了4個方法,其中apply是抽象方法,其他的三個是接口自帶,不須要實現。這裏定義當前函數的名稱爲currentFunc。文檔
此方法爲函數的執行入口,傳入T,輸出R。全部標註了@FunctionalInterface註解的接口,最好都按照這個規範來定義此方法。it
此方法的參數一個後置函數,執行順序:after.apply( currentFunc.apply(t))。這裏咱們看看after函數的定義:Function<? super R, ? extends V> after,入參是R,輸出是V,也就是說,currentFunc函數的輸出[R]直接做爲了after函數的入參,最終[andThen]方法的返回值:Function<T, V>,T -> currentFunc的入參,V -> after的輸出類型。有過linux命令操做的朋友對此應該比較熟悉,相似於linux的管道命令,前者的輸出直接當成後續命令的輸入,如:cat test.txt | grep 'XXXX'io
此方法的參數一個前置函數,執行順序:currentFunc.apply( before.apply(t)),before的入參類型爲V,輸出值類型爲T;其中before的輸出值[T]直接做爲currentFunc的入參。[compose]方法返回函數:Function<V, R>,V -> before的入參,R -> currentFunc的輸出類型。test
此靜態方法的做用比較單一,返回函數定義中的入參【T】