搜尋
首頁Javajava教程Java 8 開發頂尖技巧

Java 8 開發頂尖技巧

Feb 23, 2017 am 10:39 AM
java8

我使用Java 8編碼已經有些年頭,既用於新的應用程序,也用來遷移現有的應用,感覺是時候寫一些我發現的非常有用的「最佳實踐」。我個人並不喜歡「最佳實踐」這個說法,因為它意味著「一刀切」的解決方案,而編碼不可能是這樣的工作方式——我們需要親自去發現什麼樣的解決方案才是有效的。但是我發現了一些Java 8程式碼中可以幫助我們的一些選擇,讓我們一起來看看吧。

1.Optional

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

然而,不加思考和設計就應用Optional可能會導致影響大量的類,並可能導致可讀性較差。以下是一些關於如何有效使用Optional的技巧。

Optional應該只用於傳回類型

…不是參數,也不是欄位。幸運的是,IntelliJ IDEA的讓你打開檢查來查看是否遵循這些建議。

Java 8 開發頂尖技巧

Optional值應在遇到它們的地方中處理。 IntelliJ IDEA的建議會防止代碼Optional洩漏,所以請記得在你發現Optional的地方處理它,並迅速採取行動。

Java 8 開發頂尖技巧

不應該簡單地呼叫get()

Optional的函數是表達這個值可能是空的,並讓你處理這種情況。因此,在對它做任何事情之前一定要檢查是否有一個值。只是簡單得呼叫get()而不先檢查isPresent()在某些時候可能會導致空指標。幸運的是,IntelliJ IDEA也有檢查可以提醒你這一點。

Java 8 開發頂尖技巧

可能有更優雅的方式

#結合了get()的isPresent()當然會很讚…

Java 8 開發頂尖技巧

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

Java 8 開發頂尖技巧

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

Java 8 開發頂尖技巧

2.使用Lambda表達式

Lambda表達式是Java 8的主要特性之一。即使你還沒有使用Java 8,你現在可能已經對它們有了基本的了解。它們是用Java編程的一種新的方式,並且什麼是“最佳實踐”還不明顯。以下是我喜歡遵循的一些指引。

保持簡短

函數式程式設計與較長的lambda表達式相處會更愉快,但那些淫浸於Java多年的人會發現保持lambda表達式為區區幾行程式碼更容易。你甚至可能更願意將其限製到一行程式碼,並且你可以輕鬆重構較長的表達式為一個方法。

Java 8 開發頂尖技巧

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

Java 8 開發頂尖技巧

明確

類型資訊缺少lambda表達式,所以你可能會覺得包含型別資訊用於參數會很有用。

Java 8 開發頂尖技巧

如你所見,這回變得相當笨拙。所以我比較喜歡給參數取一個有用的名字。當然,不管你有沒有這麼做,IntelliJ IDEA可以讓你看到參數得類型資訊。

Java 8 開發頂尖技巧

甚至是lambda所代表的函數式介面:

Java 8 開發頂尖技巧

3.針對Lambda表達式設計

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

但是,如果你發現自己處於這類情況下,下面有一些超棒的技巧。

IntelliJ IDEA可以幫你引進函數式參數

這讓你可以在有人將要傳遞一個lambda而非Object的地方建立一個參數。此功能的好處是,它表明,現有函數式介面匹配規格說明。

Java 8 開發頂尖技巧

這會導致…

使用現有的函式介面

隨著開發人員越來越熟悉Java 8程式碼,我們就能知道當使用如Supplier和 Consumer的介面時,會發生什麼,以及創建一個本地的ErrorMessageCreator(舉個例子)可能會造成混亂,而且浪費。看看這個函數包了解哪些已經是可用的。

新增@FunctionalInterface到函數式接口

如果你確實需要建立自己的函數式接口,那麼就這樣用此註解標記。這似乎沒有太大的作用,但IntelliJ IDEA會告訴你,在你的介面不能匹配用於函數式介面的異常的時候。當你沒有指定要覆寫的方法時,它會標誌:

Java 8 開發頂尖技巧

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

Java 8 開發頂尖技巧

並且如果你應用它到一個類別而不是介面時,它會警告你:

Java 8 開發頂尖技巧

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

4.Stream

Stream API是Java 8另一個大特點,我認為我們真的不知道這對我們的編碼方式會產生多大的改變。以下是我發現的一些有用的東西。

排隊點操作符

我個人更喜歡排隊我的串流操作。當然,你沒有必要這樣,當我發現這樣做對我有幫助:

  • 一目了然地看到我有哪些操作

  • 調試更容易(雖然IntelliJ IDEA確實提供了對一行中的任意多個lambda表達式設定斷點的能力,但是拆分到不同的行會變得更簡單)

  • 當我測試東西的時候註解操作

  • 輕鬆插入

    peek()用於調試或測試

Java 8 開發頂尖技巧

此外,在我看來,它更整齊。如果我們按照這個模式,在減少程式碼行數方面我們並沒有增加很多。

你可能需要調整格式設定以排列點運算元。

Java 8 開發頂尖技巧

使用方法來引用

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

Java 8 開發頂尖技巧

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

Java 8 開發頂尖技巧

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

Java 8 開發頂尖技巧

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

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

Java 8 開發頂尖技巧

一般使用Streams API比迴圈和if語句的組合更明確。例如:

Java 8 開發頂尖技巧

IntelliJ IDEA建議這可重構為:

Java 8 開發頂尖技巧

我所做的效能測試表明這種重構令人驚訝——並不總是可預測性能是保持不變,改善還是變得更糟。與往常一樣,如果效能在應用程式中是關鍵,那麼在交付一種風格到另一種風格之前衡量它。

遍歷陣列時使用循環

但是,使用Java 8並不一定意味著你必須到處使用流和新的集合方法。 IntelliJ IDEA會建議轉換成流,但是,這並不意味著你必須回答「yes」(記得檢查是可以抑製或關閉的)。

特別是,遍歷原始類型的小型陣列幾乎肯定會用,以獲得更好的效能循環,很可能(至少對於Java開發人員是新的串流)更具可讀性。

Java 8 開發頂尖技巧

與任何技巧一樣,規則並不是一成不變的,但你應該決定是盡可能地使用Streams API,還是依然對一些操作使用循環。總之,要一致。

最後

 以上就是Java 8 開發頂級技巧 的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java平台是否獨立,如果如何?Java平台是否獨立,如果如何?May 09, 2025 am 12:11 AM

Java是平台獨立的,因為其"一次編寫,到處運行"的設計理念,依賴於Java虛擬機(JVM)和字節碼。 1)Java代碼編譯成字節碼,由JVM解釋或即時編譯在本地運行。 2)需要注意庫依賴、性能差異和環境配置。 3)使用標準庫、跨平台測試和版本管理是確保平台獨立性的最佳實踐。

關於Java平台獨立性的真相:真的那麼簡單嗎?關於Java平台獨立性的真相:真的那麼簡單嗎?May 09, 2025 am 12:10 AM

Java'splatFormIndenceIsnotsimple; itinvolvesComplexities.1)jvmcompatiblemustbebeeniblemustbeensuredacrossplatforms.2)Nativelibrariesandsystemcallsneedcarefulhandling.3)

Java平台獨立性:Web應用程序的優勢Java平台獨立性:Web應用程序的優勢May 09, 2025 am 12:08 AM

Java'splatformindependencebenefitswebapplicationsbyallowingcodetorunonanysystemwithaJVM,simplifyingdeploymentandscaling.Itenables:1)easydeploymentacrossdifferentservers,2)seamlessscalingacrosscloudplatforms,and3)consistentdevelopmenttodeploymentproce

JVM解釋:Java虛擬機的綜合指南JVM解釋:Java虛擬機的綜合指南May 09, 2025 am 12:04 AM

thejvmistheruntimeenvorment forexecutingjavabytecode,Cocucialforjava的“ WriteOnce,RunanyWhere”能力

Java的主要功能:為什麼它仍然是頂級編程語言Java的主要功能:為什麼它仍然是頂級編程語言May 09, 2025 am 12:04 AM

JavaremainsatopchoicefordevelopersduetoitsplatFormentence,對象與方向設計,強度,自動化的MememoryManagement和ComprechensivestAndArdArdArdLibrary

Java平台獨立性:這對開發人員意味著什麼?Java平台獨立性:這對開發人員意味著什麼?May 08, 2025 am 12:27 AM

Java'splatFormIndependecemeansDeveloperScanWriteCeandeCeandOnanyDeviceWithouTrecompOlding.thisAcachivedThroughThroughTheroughThejavavirtualmachine(JVM),WhaterslatesbyTecodeDecodeOdeIntComenthendions,允許univerniverSaliversalComplatibilityAcrossplatss.allospplats.s.howevss.howev

如何為第一次使用設置JVM?如何為第一次使用設置JVM?May 08, 2025 am 12:21 AM

要設置JVM,需按以下步驟進行:1)下載並安裝JDK,2)設置環境變量,3)驗證安裝,4)設置IDE,5)測試運行程序。設置JVM不僅僅是讓其工作,還包括優化內存分配、垃圾收集、性能調優和錯誤處理,以確保最佳運行效果。

如何查看產品的Java平台獨立性?如何查看產品的Java平台獨立性?May 08, 2025 am 12:12 AM

toensurejavaplatFormIntence,lofterTheSeSteps:1)compileAndRunyOpplicationOnmultPlatFormSusiseDifferenToSandjvmversions.2)upureizeci/cdppipipelinelikeinkinslikejenkinsorgithikejenkinsorgithikejenkinsorgithikejenkinsorgithike forautomatecross-plateftestesteftestesting.3)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中