新聞中心
這篇文章將為大家詳細(xì)講解有關(guān)Java 中出現(xiàn)空指針異常如何使用Optional解決,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
1、概述
Java8的版本,新增了Optional和[Lambda]表達(dá)式,Optional主要用于作為返回類型(主要解決的問題是臭名昭著的空指針異常
(NullPointerException)),并將其與流(或返回可選的方法)相結(jié)合以構(gòu)建連貫API。
但是,有些情況可以被認(rèn)為是陷阱,因?yàn)樗鼈儠?huì)降低代碼的質(zhì)量,甚至導(dǎo)致意想不到的錯(cuò)誤。總結(jié)以下26個(gè)例子,以避免這些陷阱。
2、 目 錄
[第1項(xiàng):決不將Null分配給可選變量]
[第2項(xiàng):調(diào)用Optional.get()之前,確保Optional具有值]
[第3項(xiàng):當(dāng)不存在任何值時(shí),通過Optional.orElse()方法設(shè)置/返回已經(jīng)構(gòu)造的默認(rèn)對(duì)象]
[第4項(xiàng):不存在任何值時(shí),通過Optional.orElseGet()方法設(shè)置/返回不存在的默認(rèn)對(duì)象]
[第5項(xiàng):當(dāng)不存在任何值時(shí),自Java 10起通過orElseThrow()拋出java.util.NoSuchElementException異常]
[第6項(xiàng):當(dāng)不存在任何值時(shí),通過orElseThrow(Supplier <?extended X> exceptionSupplier)引發(fā)顯式異常]
[第7項(xiàng):當(dāng)你有可選的并且需要空引用時(shí),請(qǐng)使用orElse(null)]
[第8項(xiàng):使用可選(如果存在)。如果不存在,則什么也不做。這是Optional.ifPresent()的工作。]
[第9項(xiàng):使用可選(如果存在)。如果不存在,請(qǐng)執(zhí)行基于空的操作。這是Optional.ifPresentElse(),Java 9的工作。]
[第10項(xiàng):當(dāng)值存在時(shí),設(shè)置/返回該可選項(xiàng)。如果不存在任何值,則設(shè)置/返回另一個(gè)可選項(xiàng)。這是Java 9的Optional.or()的工作。]
[第11項(xiàng):Optional.orElse / orElseXXX是Lambdas中的isPresent()-get()完美替代]
[第12項(xiàng):避免僅出于獲取價(jià)值的目的而鏈接可選方法]
[第13項(xiàng):不要聲明任何類型的可選字段]
[第14項(xiàng):在構(gòu)造函數(shù)參數(shù)中不要使用可選]
[第15項(xiàng):在Setters參數(shù)中不要使用可選]
[第16項(xiàng):在方法參數(shù)中不要使用可選]
[第17項(xiàng):不要使用Optional 的返回空的集合或數(shù)組]
[第18項(xiàng):避免在集合中使用Optional]
[第19項(xiàng):不要混淆Optional.of()和Optional.ofNullable()]
[第20項(xiàng):避免使用可選的,并選擇非通用的OptionalInt,OptionalLong或OptionalDouble]
[第21項(xiàng):無需包裝主張平等的任擇方案]
[第22項(xiàng):通過Map()和flatMap()轉(zhuǎn)換值]
[第23項(xiàng):使用filter()根據(jù)預(yù)定義的規(guī)則拒絕包裝值]
[第24項(xiàng):我們是否需要將可選API與流API鏈接在一起?]
[第25項(xiàng):避免對(duì)可選選項(xiàng)使用身份敏感的操作]
[第26項(xiàng):如果Optional為空,則返回一個(gè)布爾值。選Java 11,Optional.isEmpty()]
第1項(xiàng):決不將Null分配給可選變量
避免:
// 避免 public OptionalfetchCart() { Optional emptyCart = null; ... }
網(wǎng)頁題目:Java中出現(xiàn)空指針異常如何使用Optional解決-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://fisionsoft.com.cn/article/dpdcji.html