第42條:Lambda優先于匿名類

本節作者主要是介紹了lambda 的來歷、優勢以及使用時的一些注意事項。


  • 來歷:
    在java8之前,創建函數對象都是通過匿名類。但是匿名類的代碼太過繁瑣,從編寫和可讀性上都不便于推廣。于是在java8中引入了lambda 表達式來實現函數式接口(帶有單個抽象方法的接口)。

  • 優勢
    可見lambda 表達式就是為了解決匿名類不抑郁編寫和可讀性差的問題引入的。使用lambda 表達式可以簡化再創建函數式接口時的代碼。lambda表達式可以省略參數和返回值的類型,因為編譯器會通過類型推斷 推導出來。(不能推導出來的時候需要指明)
    因此在java8之后,lambda 就成了表示小函數對象的最佳方式。

  • 注意事項

    • 由于lambda是沒有名字和文檔的,如果一個計算不是自解釋的,或是行數較多(對于lambda來說一行最好,三行最多),就不要放在lambda中了,推薦重構為新的方法。
    • 在枚舉類中使用時:通過enum構造傳入的參數是在靜態環境的,所以從enum構造傳入的lambda不能訪問枚舉的成員變量
    • 雖然lambda 是匿名類在創建簡單函數式方法時的優化,但是有些場景只能使用匿名類:

1、抽象類或接口有多個需要覆蓋的方法
2、需要引用自身時,lambda 無法獲得對自身的引用,this 指的還是外圍實例.
而匿名類可以,匿名類中的this 指的是匿名類實例自身。


lambda表達式在實踐中使用的很多,用法基本也都了解。讀完這部分最大的收貨其實是回憶起了在一些特殊的場景下,還是只能使用匿名類。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容