JDK8 - Function介紹


注:寫這個文檔只是為了方便加深記憶,加強理解,重點關注兩個default方法中泛型【V】。

JDK8作為一個還在維護階段的長期版本,勢必會在企業應用中占據相當大的市場份額,所以還是以JDK8作為例子的背景。(下一個長期版本是今年9月發布的JDK11)

 函數接口定義:

Interface Function<T,R>

這里稍稍說明一下接口中的<T,R>泛型的含義

  • T 函數的輸入類型
  • R 函數的輸出類型

接口內還有第三個泛型,重點關注

  • V after函數的輸出類型和before函數的輸入類型

 

接口中定義了4個方法,其中apply是抽象方法,其余的三個是接口自帶,不需要實現。這里定義當前函數的名稱為currentFunc。

  • R apply(T t)

  此方法為函數的執行入口,傳入T,輸出R。所有標注了@FunctionalInterface注解的接口,最好都按照這個規范來定義此方法。

  • default <V> Function<T, V> andThen(Function<? super R, ? extends V> after)

  此方法的參數一個后置函數,執行順序: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'

  • default <V> Function<V, R> compose(Function<? super V, ? extends T> before)

  此方法的參數一個前置函數,執行順序:currentFunc.apply( before.apply(t)),before的入參類型為V,輸出值類型為T;其中before的輸出值[T]直接作為currentFunc的入參。[compose]方法返回函數:Function<V, R>,V -> before的入參,R -> currentFunc的輸出類型。

  • static <T> Function<T, T> identity()

  此靜態方法的作用比較單一,返回函數定義中的入參【T】

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM