本文通過具體案例演示函數式接口Function<T,R>
的三種實現方式演變過程。
一、傳統匿名內部類實現
Integer resInt1 = t1(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {int i = Integer.parseInt(s);return i;}
});
實現特點:
- 顯式創建
Function
接口的匿名實現類 - 完整聲明
apply
方法的參數類型String
- 使用顯式
return
語句返回結果 - 包含完整的花括號和方法體結構
二、基礎Lambda實現
Integer resInt2 = t1((String t) -> {int i = Integer.parseInt(t);return i;
});
優化點:
- 使用Lambda表達式替代匿名類
- 保持顯式參數類型聲明
- 保留完整方法體結構
- 語法更緊湊但保留核心邏輯
三、精簡Lambda表達式
Integer resInt3 = t1(t -> Integer.parseInt(t));
優化路徑:
-
參數類型推斷
- 編譯器通過方法簽名
Function<String, Integer>
自動推斷t
的類型 - 簡寫為
t ->
代替(String t) ->
- 編譯器通過方法簽名
-
單表達式優化
- 當方法體僅包含單個表達式時:
- 省略
return
關鍵字 - 移除花括號
- 直接寫表達式作為返回值
-
方法引用替代(進一步優化)
Integer resInt4 = t1(Integer::parseInt);
- 使用類方法引用語法
- 完全消除參數列表
- 直接綁定靜態方法
核心方法解析
public static Integer t1(Function<String, Integer> fn) {return fn.apply("1");
}
執行流程:
- 接收
Function<String, Integer>
類型參數 - 調用
apply
方法傳入固定參數"1" - 返回轉換后的
Integer
結果