亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Java 8的五大開發(fā)技巧

瀏覽:58日期:2022-09-05 16:05:29

我使用Java 8編碼已經(jīng)有些年頭,既用于新的應(yīng)用程序,也用來遷移現(xiàn)有的應(yīng)用,感覺是時候?qū)懸恍┪野l(fā)現(xiàn)的非常有用的“最佳實踐”。我個人并不喜歡“最佳實踐”這個說法,因為它意味著“一刀切”的解決方案,而編碼不可能是這樣的工作方式——我們需要親自去發(fā)現(xiàn)什么樣的解決方案才是有效的。但是我發(fā)現(xiàn)了一些Java 8代碼中可以幫助我們的一些選擇,讓我們一起來看看吧。

 1.Optional

Optional是一個嚴重被低估的功能,并且有潛力刪除很多困擾我們的NullPointerExceptions。這在代碼邊界中(要么是正在使用的API,要么是正在暴露的API)特別有用,因為它允許你和你的調(diào)用代碼來推理所期待的東西。

然而,不加思考和設(shè)計就應(yīng)用Optional可能會導(dǎo)致影響大量的類,并可能導(dǎo)致可讀性更差。下面是一些關(guān)于如何高效使用Optional的技巧。

Optional應(yīng)該只用于返回類型

……不是參數(shù),也不是字段。幸運的是,IntelliJ IDEA的讓你打開檢查來查看是是否遵循這些建議。

Java 8的五大開發(fā)技巧

Optional值應(yīng)在遇到它們的地方中處理。IntelliJ IDEA的建議會防止代碼Optional泄漏,所以請記得在你發(fā)現(xiàn)Optional的地方處理它,迅速采取行動。

Java 8的五大開發(fā)技巧

不應(yīng)該簡單調(diào)用get()

Optional的功能是表達這個值可能是空的,并讓你應(yīng)對這種情況。因此,在對它做任何事情之前一定要檢查是否有一個值。只是簡單得調(diào)用get()而不先檢查isPresent()在某些時候可能會導(dǎo)致空指針。幸運的是,IntelliJ IDEA也有檢查可以提醒你這一點。

Java 8的五大開發(fā)技巧

可能有更優(yōu)雅的方式

結(jié)合了get()的isPresent()當然會很贊…

Java 8的五大開發(fā)技巧

……但也有更優(yōu)雅的解決方案。你可以使用orElse在萬一是空值的情況下給一個替代方案。

Java 8的五大開發(fā)技巧

……或者你可以使用orElseGet說明在值為空的情況下調(diào)用哪個方法。這似乎與上面的例子相同,但supplier方法將只在需要的時候調(diào)用,因此,如果這是一種昂貴的方法,那么使用lambda會有更佳性能。

Java 8的五大開發(fā)技巧

 2.使用Lambda表達式

Lambda表達式是Java 8的主要特點之一。即使你還沒有使用Java 8,你現(xiàn)在可能已經(jīng)對它們有了基本的了解。它們是用Java編程的一種新的方式,并且什么是“最佳實踐”還不明顯。下面是我喜歡遵循的一些指引。

保持簡短

函數(shù)式程序員與較長的lambda表達式相處會更愉快,但那些淫浸于Java多年的人會發(fā)現(xiàn)保持lambda表達式為區(qū)區(qū)幾行代碼更容易。你甚至可能更愿意將其限制到一行代碼,并且你可以輕松重構(gòu)較長的表達式為一個方法。

Java 8的五大開發(fā)技巧

這些甚至可能會成為方法引用。方法引用一開始會覺得有點陌生,但實際上堅持方法引用是有價值的,因為它們在某些情況下有助于可讀性,后面我會討論到這一點。

Java 8的五大開發(fā)技巧

明確

類型信息缺少lambda表達式,所以你可能會覺得包含類型信息用于參數(shù)會很有用。

Java 8的五大開發(fā)技巧

正如你所見,這回變得相當笨拙。所以我更喜歡給參數(shù)取一個有用的名字。當然,不管你有沒有這么做,IntelliJ IDEA可以讓你看到參數(shù)得類型信息。

Java 8的五大開發(fā)技巧

甚至是lambda所代表的函數(shù)式接口:

Java 8的五大開發(fā)技巧

 3.針對Lambda表達式設(shè)計

我認為lambda表達式有點像泛型——和泛型一起,我們經(jīng)常使用它們(例如,添加類型信息到List<>),但最好我們可以設(shè)計一種方法或一個具有泛型類型(例如Person<T>)的類。同樣的,當使用類似于Streams API的東西時,我們會傳遞lambda表達式,但更好的是創(chuàng)造一個需要lambda參數(shù)的方法。

但是,如果你發(fā)現(xiàn)自己處于這類情況下,下面有一些超棒的技巧。

IntelliJ IDEA可以幫你引進函數(shù)式參數(shù)

這讓你可以在有人將傳遞一個lambda而非Object的地方創(chuàng)建一個參數(shù)。此功能的好處是,它表明,現(xiàn)有函數(shù)式接口匹配規(guī)格說明。

Java 8的五大開發(fā)技巧

這會導(dǎo)致…

使用現(xiàn)有的函數(shù)式接口

隨著開發(fā)人員越來越熟悉Java 8代碼,我們就能知道當使用如Supplier和 Consumer的接口時,會發(fā)生什么,以及創(chuàng)建一個本地的ErrorMessageCreator(舉個例子)可能會造成混亂,而且浪費??纯催@個函數(shù)包了解一下哪些已經(jīng)是可用的。

添加@FunctionalInterface到函數(shù)式接口

如果你確實需要創(chuàng)建自己的函數(shù)式接口,那么就這樣用此注釋標記。這似乎沒有太大的作用,但IntelliJ IDEA會告訴你,在你的接口不能匹配用于函數(shù)式接口的異常的時候。當你沒有指定要覆蓋的方法時,它會標志:

Java 8的五大開發(fā)技巧

當你指定了太多方法的時候,它會標志:

Java 8的五大開發(fā)技巧

并且如果你應(yīng)用它到一個類而不是接口時,它會警告你:

Java 8的五大開發(fā)技巧

lambda表達式可用于帶有一個單一抽象方法的任何接口,但它們不能用于符合相同標準的抽象類。似乎不合邏輯,但就是這樣。

 4.Stream

Stream API是Java 8另一個大特點,并且我認為我們還真的不知道這對我們的編碼方式會產(chǎn)生多大的改變。下面是我發(fā)現(xiàn)的一些有用的東西。

排隊點操作符

我個人更喜歡排隊我的流操作。當然,你沒有必要這樣,當我發(fā)現(xiàn)這樣做對我有幫助:

一目了然地看到我有哪些操作調(diào)試更容易(雖然IntelliJ IDEA確實提供了對一行中的任意多個lambda表達式設(shè)置斷點的能力,但是拆分到不同的行會變得更簡單)當我測試東西的時候注釋操作輕松插入peek()用于調(diào)試或測試

Java 8的五大開發(fā)技巧

此外,在我看來,它更整潔。如果我們按照這個模式,在減少代碼行數(shù)方面我們并沒有增加很多。

你可能需要調(diào)整格式設(shè)置以排列點操作符。

Java 8的五大開發(fā)技巧

使用方法引用

是的,確實需要一段時間來適應(yīng)這個奇怪的語法。但是,如果使用得當,它確實可以增加可讀性。請看:

Java 8的五大開發(fā)技巧

與(相對)新的Objects類上的輔助方法相比較:

Java 8的五大開發(fā)技巧

后者的代碼對于哪些值是要保存的更加明確。當lambda可以被折疊到方法參考的時候,IntelliJ IDEA通常會讓你知道。

Java 8的五大開發(fā)技巧

當遍歷一個集合時,在可行的情況下使用Streams API

…或者新的集合方法,如forEach。IntelliJ IDEA給你建議是:

Java 8的五大開發(fā)技巧

一般使用Streams API比循環(huán)和if語句的組合更加明確。例如:

Java 8的五大開發(fā)技巧

IntelliJ IDEA建議這可重構(gòu)為:

Java 8的五大開發(fā)技巧

我所做的性能測試表明這種重構(gòu)令人驚訝——并不總是可預(yù)測性能是保持不變,改善還是變得更糟。與往常一樣,如果性能在應(yīng)用程序中是關(guān)鍵,那么在交付一種風格到另一種之前衡量它。

遍歷數(shù)組時使用循環(huán)

但是,使用Java 8并不一定意味著你必須到處使用流和新的集合方法。IntelliJ IDEA會建議轉(zhuǎn)換成流,但是,這并不意味著你必須回答“yes”(記得檢查是可以抑制或關(guān)閉的)。

特別是,遍歷原始類型的小型數(shù)組幾乎肯定會用,以獲得更好的性能循環(huán),很可能(至少對于Java開發(fā)人員是新的流)更具可讀性。

Java 8的五大開發(fā)技巧

與任何技巧一樣,規(guī)則并不是一成不變的,但你應(yīng)該決定是盡可能地使用Streams API,還是依然對一些操作使用循環(huán)。總之,要一致。

 最后

每天都在發(fā)現(xiàn)新的東西,并且有時候我的偏好會發(fā)生變化——例如,方法引用,我曾經(jīng)深惡痛絕并且避免在我的代碼中使用。現(xiàn)在我很想聽聽你的秘訣!

英文原文:Java 8 Top Tips

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 日本高清色本免费现在观看 | xxxx免费国产在线视频 | 亚洲综合欧美日韩 | 日韩欧美一级a毛片欧美一级 | 欧美精品成人一区二区视频一 | 日韩欧美在线综合网高清 | 青青草免费在线视频 | 免费爱爱视频网站 | 日本一级特黄特色大片免费视频 | 亚欧成人毛片一区二区三区四区 | 国产 欧美 日韩 在线 | 欧美综合另类 | 在线观看成年美女黄网色视频 | 一级黄色大片免费观看 | 欧美一二区视频 | 日本高清一级片 | 中国一级毛片欧美一级毛片 | 国产成人精品美女在线 | 日本高清视频www夜色资源网 | 国产免费啪啪 | 在线视频91 | 日韩a级在线 | 高h喷水荡肉爽文各种场合 高h辣肉各种姿势爽文bl | 欧美日韩一区二区三区四区 | 国产黄大片 | 边做边摸边揉的免费视频 | 国产码欧美日韩高清综合一区 | 在线碰| 国产精品v欧美精品v日本精 | 又黄又爽视频 | 国产国产精品人在线视 | 亚洲国产精品国产自在在线 | 一区视频 | 亚洲欧美另类日本久久影院 | 五月天爱爱视频 | 国产不卡在线播放 | 伊人黄色网 | 91久久爱| 亚洲在线免费观看 | 91久久色 | 看亚洲a级一级毛片 |