更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        Java 8 最佳技巧

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2018-04-26 12:00

        在過去的幾年中,我一直使用Java 8 進行了很多的編碼工作,用于開發新應用和遷移遺留應用,我覺得是時候寫一些有用的”最佳實踐”。我個人不喜歡”最佳實踐”這個術語,因為它意味著“一刀切”的解決方案,當然編碼工作是不會這樣的–這是因為我們開發人員會想出適合我們的方案。但我發現我對Java8特別的喜歡,它讓我的生活更輕松一點,所以我想就此話題展開討論。

        Optional

        Optional 是一個被嚴重低估的功能, 它消除了很多困擾著我們的 NullPointerExceptions。它在代碼邊界(包括你調用和提供 API)處理上特別有用,因為它允許你和你調用的代碼說明程序運行的期望結果。

        然而,如果沒有必要的思考和設計,那么就會導致一個小變化而影響大量的類,也會導致可讀性變差。這里有一些關于如何高效使用Optional的提示。

        Optional 應該只用于返回類型

        …不能是參數和屬性. 閱讀這個博客 了解怎樣使用 Optional。 幸運的是, IntelliJ IDEA 在打開 inspection功能的情況下會檢查你是否遵循了這些建議。

        Java 8 最佳技巧

        可選值應該在使用的地方進行處理. IntelliJ IDEA的建議可以防止你不恰當的使用Optional, 所以你應該立即處理你發現的不恰當使用Optional。(根據自己的理解翻譯)

        Java 8 最佳技巧

        你不應該簡單的調用 get()

        Optinal的目的是為了表示此值有可能為空,且讓你有能力來應付這種情況。因此,在使用值之前進行檢查是非常重要的。在某些情況下簡單的調用get()而沒有先使用isPresent()進行檢查是一樣會導致空指針問題。幸運的是,IntelliJ IDEA 任然會檢查出這個問題并警告你。

        Java 8 最佳技巧

        有可能是一個更優雅的方式

        isPresent() 與 get()結合使用的技巧…

        Java 8 最佳技巧

        …但還有更優雅的解決方案。你可以使用 orElse方法來使得當它為null時給出一個代替的值。

        Java 8 最佳技巧

        …或者使用orElseGet方法來處理上述相同情況。這個例子和上面的看起來好像一樣,但本例是可以調用 supplier 接口的實現,,因此如果它是一個高開銷的方法,可以使用 lambda 表達式來獲得更好的性能。

        Java 8 最佳技巧

        使用Lambda表達式

        Lambda 表達式是 Java 8 的賣點之一.。即使你還沒有使用過Java 8, 到目前你也可能有一些基本的了解。但在Java編程中還是一種新的方式,它也不是明顯的”最佳實踐” 。 這里有一些我遵循的指南。

        保持簡短

        函數式程序員更愿意使用較長的lambda 表達式,但我們這些僅僅使用Java很多年的程序員來說更容易保持lambda 表達式的短小。你甚至更喜歡把它們限制在一行,更容易把較長的表達式重構到一個方法中。

        Java 8 最佳技巧

        把它們變成一個方法引用, 方法引用看起來有一點陌生,但卻值得這樣做,因為在某些情況有助于提高可讀性,后面我再談可讀性。

        Java 8 最佳技巧

        明確的

        (作者應該想要表達的是: 參數命名規范,要有意義;有更好的翻譯請修正)

        lambda 表達式中類型信息已經丟失了,因此你會發現包含類型信息的參數會更有用。

        Java 8 最佳技巧

        如你所見,這樣會比較麻煩。因此我更喜歡給參數一個更有意義的命名。當然,你做與否, IntelliJ IDEA 都會讓你看到參數的類型信息。

        Java 8 最佳技巧

        即使是在函數式接口的lambda 表達式中:

        Java 8 最佳技巧

        針對 Lambda 表達式進行設計

        我認為lambda表達式有點像泛型– 泛型,我們經常使用它們 (例如, 給 List<>添加類型信息 ),但不常見的是我們把一個方法或類泛型化 (如: Person)。同樣的, 它就像我們使用通過lambdas包裝的 Streams API,但對我們來說更罕見的是創建一個需要 lambda 表達式參數的方法。

        如果你發現自己正處在這種情況的話,那么這里有一些不錯的技巧。

        IntelliJ IDEA 可以幫助你引入一個函數化的參數

        這里讓你可以使用 Lambda 表達式而非對象來 創建一個參數 。這個功能的好處在于其建議使用一個已有的 函數接口 來匹配這個規范。

        Java 8 最佳技巧

        這個將引導我們

        使用已有的函數接口

        當開發者越來越熟悉 Java 8 代碼時,我們會知道使用例如 Supplier 和 Consumer 這樣的接口會發生什么,但是單獨再創建一個 ErrorMessageCreator 會讓我們很詫異并且很浪費時間。你可以翻閱 function package 來查看系統本身已經給我們準備了什么。

        為函數接口添加 @FunctionalInterface 注解

        如果你真的需要創建自己的函數接口,那么就需要用這個 @FunctionalInterface 注解。這個注解似乎沒多大用處,但是 IntelliJ IDEA 會在接口不滿足這個注解要求的情況下予以提示。例如你沒有指定要繼承的方法:

        Java 8 最佳技巧

        指定太多的方法:

        Java 8 最佳技巧

        在類中使用注解而不是在接口:

        Java 8 最佳技巧

        Lambda 表達式可用于任意只包含單個抽象方法的接口中,但是不能用于滿足該要求的抽象類。看似不符合邏輯,但實際要求必須如此。

        Streams

        Stream API 是Java 8的另一大賣點, 我認為到現在為止,我們仍然不知道這會對我們的編碼方式有多大改變.但我發現這是一個好壞參半的功能。

        流式風格

        就我個人而言,更喜歡使用流式風格.當然你不必也這么做, 但我發現它幫助了我:

        一眼就能看出有哪些操作,它的執行順序是什么

        更方便調試(雖然IntelliJ IDEA提供了在包含lambda表達式的行上設置斷點的能力,為了更方便調試,把它拆分到不同的行上)

        在測試的時候允許取消一個操作

        在調試或測試是,可以很方便的插入peek()

        Java 8 最佳技巧

        在我看來這樣寫很簡潔。但是使用這種方法并沒有給我們節省多少代碼行。

        你可能需要調整代碼格式化設置讓代碼看起來更加清晰。

        Java 8 最佳技巧

        使用方法引用

        是的,你需要一點時間來適應這個奇怪的語法。但如果使用恰當,真的可以提升代碼的可讀性,看看下面代碼:

        Java 8 最佳技巧

        以及使用 Objects 類的輔助方法:

        Java 8 最佳技巧

        后面一段代碼更加的明確可讀。IntelliJ IDEA 通常會知道怎么將一個 Lambda 表達式進行折疊。

        Java 8 最佳技巧

        當對集合進行元素迭代時,盡可能的使用 Streams API

        …或者用新的集合方法,例如 forEach. IntelliJ IDEA 會建議你這么做:

        Java 8 最佳技巧

        一般來說使用 Streams API 比起循環和 if 語句組合來得更加直觀,例如:

        Java 8 最佳技巧

        IntelliJ IDEA 會建議這樣的寫法進行重構:

        Java 8 最佳技巧

        我做過的性能測試顯示這種重構帶來的結果比較奇怪,難以預測,有時候好,有時候壞,有時候沒區別。一如既往的,如果你的應用對性能問題非常在意,請認真的進行衡量。

        遍歷數組時請用 for 循環

        然后,使用 Java 8 并不意味著你一定要使用流 API 以及集合的新方法。IntelliJ IDEA 會建議一些做法改用流的方式重構,但你不一定非得接受 (記住 inspections can be suppressed 或者 turned off).

        特別是對一個原始類型的小數組時,使用 for 循環的性能是最好的,而且代碼更具可讀性(至少對 Streams API 的新手來說是這樣):

        Java 8 最佳技巧

        任何的技巧和提示都不是一成不變的,你應該自己決定哪里需要使用 Streams API ,而哪里還用循環操作。

        感謝大家閱讀由Java教程分享的“Java 8 最佳技巧”希望對大家有所幫助,更多精彩內容請關注Java培訓官網

        免責聲明:本文由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:關于類和對象一定要分清
        下一篇:Dubbo入門——搭建一個最簡單的Demo框架
        12大要點讓你的Java開發所向披靡~

        12大要點讓你的Java開發所向披靡~

        學習Java最好的12本免費在線電子書

        學習Java最好的12本免費在線電子書

        Java常用日志框架介紹

        Java常用日志框架介紹

        一篇文章了解RPC框架原理

        一篇文章了解RPC框架原理

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>