Java8新特性O(shè)ptional類(lèi)處理空值判斷回避空指針異常應(yīng)用
一、序言
空值異常是應(yīng)用運(yùn)行時(shí)常見(jiàn)的異常,傳統(tǒng)方式為了編寫(xiě)健壯的應(yīng)用,常常使用多層嵌套邏輯判斷回避空指針異常。Java8新特性之Optional為此類(lèi)問(wèn)題提供了優(yōu)雅的解決方式。
廣大程序員朋友對(duì)空值異??坦倾懶?,因此Optional一經(jīng)推出,廣受贊譽(yù)。
二、問(wèn)題復(fù)原
(一)素材準(zhǔn)備
public class LoginUser implements UserDetails {
private Long deptId;
private String token;
private Long loginTime;
private Long expireTime;
private String ipaddr;
private String loginLocation;
private String browser;
private String os;
private SysUser user;
}
public class SysUser {
private Long userId;
private Long deptId;
private String userName;
}
相關(guān)Setter和Getter方法自行添加。
(二)模擬演示
1、傳統(tǒng)方式
/**
* 普通嵌套判斷方式判斷空值
*
* @param loginUser 登錄用戶(hù)體
* @return 用戶(hù)ID
*/
public Long getUserId(LoginUser loginUser){
if (loginUser!=null) {
SysUser user = loginUser.getUser();
if (user!=null) {
return user.getUserId();
}
}
return null;
}
方法參數(shù)傳遞的變量loginUser使用前不確定是否為空,因此需要邏輯判斷;user變量使用前不確定是否為空,因此需要邏輯判斷。兩層邏輯判斷之后,方能安心調(diào)用獲取UserId方法。
顯而易見(jiàn),當(dāng)對(duì)象嵌套層次較深時(shí),需要做的邏輯判斷越多,代碼越復(fù)雜。
2、優(yōu)雅方式
/**
* 通過(guò)Optinal處理空值判斷
*
* @param loginUser 登錄用戶(hù)體
* @return 用戶(hù)ID
*/
public Long getUserId(LoginUser loginUser) {
return Optional.ofNullable(loginUser)
.map(LoginUser::getUser).map(SysUser::getUserId).orElse(null);
}
在滿足同樣需求的前提下,使用Optional類(lèi)代碼量更少,業(yè)務(wù)邏輯更清晰。
Optional使用方法引用的語(yǔ)法,屬于Lambda表達(dá)式的一種。
三、小結(jié)
本文介紹了Optional類(lèi)在處理空值判斷場(chǎng)景的應(yīng)用,通過(guò)對(duì)比的方式,將Optional的優(yōu)點(diǎn)展現(xiàn)出來(lái)。從場(chǎng)景入手學(xué)技術(shù)比單調(diào)的技術(shù)講解更有趣味。
以上就是Java8新特性O(shè)ptional類(lèi)處理空值判斷回避空指針異常應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于Optional類(lèi)空值判斷回避空指針異常處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java EE中的編碼問(wèn)題及解決方案(總結(jié))
在JavaEE開(kāi)發(fā)中,處理字符編碼問(wèn)題是確保數(shù)據(jù)準(zhǔn)確傳輸和顯示的關(guān)鍵,常見(jiàn)的編碼問(wèn)題包括表單提交亂碼、JSP頁(yè)面編碼、請(qǐng)求參數(shù)編碼不一致等,本文給大家介紹Java EE中的編碼問(wèn)題及解決方案,感興趣的朋友一起看看吧2024-10-10
Java對(duì)象布局(JOL)實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java對(duì)象布局(JOL)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java?CyclicBarrier錯(cuò)誤使用的實(shí)例
文章描述了一個(gè)Java程序使用CyclicBarrier實(shí)現(xiàn)兩個(gè)線程交替打印字母和數(shù)字時(shí)遇到的問(wèn)題,由于線程執(zhí)行順序不當(dāng),導(dǎo)致輸出結(jié)果與預(yù)期不符,通過(guò)調(diào)整線程的等待和打印順序,解決了問(wèn)題,文章還提供了一個(gè)控制流圖來(lái)詳細(xì)解釋修改前后的程序邏輯2025-01-01
elasticsearch如何根據(jù)條件刪除數(shù)據(jù)
Elasticsearch是一個(gè)基于Apache Lucene?的開(kāi)源搜索引擎,無(wú)論在開(kāi)源還是專(zhuān)有領(lǐng)域,Lucene 可以被認(rèn)為是迄今為止最先進(jìn)、性能最好的、功能最全的搜索引擎庫(kù),這篇文章主要介紹了elasticsearch如何根據(jù)條件刪除數(shù)據(jù),需要的朋友可以參考下2023-03-03
java對(duì)象中什么時(shí)候適合用static修飾符踩坑解決記錄
這篇文章主要為大家介紹了java對(duì)象中什么時(shí)候適合用static修飾符踩坑解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼
這篇文章主要介紹了Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
基于Java的電梯系統(tǒng)實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了基于Java的電梯系統(tǒng)實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10

