我使用Java 8編碼已經(jīng)有些年頭,既用于新的應(yīng)用程序,也用來遷移現(xiàn)有的應(yīng)用,感覺是時(shí)候?qū)懸恍┪野l(fā)現(xiàn)的非常有用的“最佳實(shí)踐”。我個(gè)人并不喜歡“最佳實(shí)踐”這個(gè)說法,因?yàn)樗馕吨耙坏肚小钡慕鉀Q方案,而編碼不可能是這樣的工作方式——我們需要親自去發(fā)現(xiàn)什么樣的解決方案才是有效的。但是我發(fā)現(xiàn)了一些Java 8代碼中可以幫助我們的一些選擇,讓我們一起來看看吧。
1.Optional
Optional是一個(gè)嚴(yán)重被低估的功能,并且有潛力刪除很多困擾我們的NullPointerExceptions。這在代碼邊界中(要么是正在使用的API,要么是正在暴露的API)特別有用,因?yàn)樗试S你和你的調(diào)用代碼來推理所期待的東西。
然而,不加思考和設(shè)計(jì)就應(yīng)用Optional可能會(huì)導(dǎo)致影響大量的類,并可能導(dǎo)致可讀性更差。下面是一些關(guān)于如何高效使用Optional的技巧。
Optional應(yīng)該只用于返回類型
……不是參數(shù),也不是字段。幸運(yùn)的是,IntelliJ IDEA的讓你打開檢查來查看是是否遵循這些建議。
Optional值應(yīng)在遇到它們的地方中處理。IntelliJ IDEA的建議會(huì)防止代碼Optional泄漏,所以請(qǐng)記得在你發(fā)現(xiàn)Optional的地方處理它,迅速采取行動(dòng)。
不應(yīng)該簡單調(diào)用get()
Optional的功能是表達(dá)這個(gè)值可能是空的,并讓你應(yīng)對(duì)這種情況。因此,在對(duì)它做任何事情之前一定要檢查是否有一個(gè)值。只是簡單得調(diào)用get()而不先檢查isPresent()在某些時(shí)候可能會(huì)導(dǎo)致空指針。幸運(yùn)的是,IntelliJ IDEA也有檢查可以提醒你這一點(diǎn)。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26