Java 8 開發(fā)的 4 大技巧
點(diǎn)擊上方 java項(xiàng)目開發(fā) ,選擇 星標(biāo) 公眾號
點(diǎn)擊上方 java項(xiàng)目開發(fā) ,選擇 星標(biāo) 公眾號
重磅資訊,干貨,第一時(shí)間送達(dá)
重磅資訊,干貨,第一時(shí)間送達(dá)
……不是參數(shù),也不是字段。幸運(yùn)的是,IntelliJ IDEA的讓你打開檢查來查看是是否遵循這些建議。


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

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



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


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



我認(rèn)為lambda表達(dá)式有點(diǎn)像泛型——和泛型一起,我們經(jīng)常使用它們(例如,添加類型信息到List< >),但最好我們可以設(shè)計(jì)一種方法或一個(gè)具有泛型類型(例如Person< T >)的類。同樣的,當(dāng)使用類似于Streams API的東西時(shí),我們會傳遞lambda表達(dá)式,但更好的是創(chuàng)造一個(gè)需要lambda參數(shù)的方法。
這讓你可以在有人將傳遞一個(gè)lambda而非Object的地方創(chuàng)建一個(gè)參數(shù)。此功能的好處是,它表明,現(xiàn)有函數(shù)式接口匹配規(guī)格說明。

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



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

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

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


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

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



我所做的性能測試表明這種重構(gòu)令人驚訝——并不總是可預(yù)測性能是保持不變,改善還是變得更糟。與往常一樣,如果性能在應(yīng)用程序中是關(guān)鍵,那么在交付一種風(fēng)格到另一種之前衡量它。
遍歷數(shù)組時(shí)使用循環(huán)
特別是,遍歷原始類型的小型數(shù)組幾乎肯定會用,以獲得更好的性能循環(huán),很可能(至少對于Java開發(fā)人員是新的流)更具可讀性。

--完-- 推薦閱讀:
怎么接私貨?這個(gè)渠道你100%有用!請收藏!喜歡文章,點(diǎn)個(gè)在看

