Java8新特性O(shè)ptional類處理空值判斷回避空指針異常應(yīng)用
一、序言
空值異常是應(yīng)用運行時常見的異常,傳統(tǒng)方式為了編寫健壯的應(yīng)用,常常使用多層嵌套邏輯判斷回避空指針異常。Java8新特性之Optional為此類問題提供了優(yōu)雅的解決方式。
廣大程序員朋友對空值異??坦倾懶?,因此Optional一經(jīng)推出,廣受贊譽。
二、問題復原
(一)素材準備
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 登錄用戶體
* @return 用戶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方法。
顯而易見,當對象嵌套層次較深時,需要做的邏輯判斷越多,代碼越復雜。
2、優(yōu)雅方式
/**
* 通過Optinal處理空值判斷
*
* @param loginUser 登錄用戶體
* @return 用戶ID
*/
public Long getUserId(LoginUser loginUser) {
return Optional.ofNullable(loginUser)
.map(LoginUser::getUser).map(SysUser::getUserId).orElse(null);
}
在滿足同樣需求的前提下,使用Optional類代碼量更少,業(yè)務(wù)邏輯更清晰。
Optional使用方法引用的語法,屬于Lambda表達式的一種。
三、小結(jié)
本文介紹了Optional類在處理空值判斷場景的應(yīng)用,通過對比的方式,將Optional的優(yōu)點展現(xiàn)出來。從場景入手學技術(shù)比單調(diào)的技術(shù)講解更有趣味。
以上就是Java8新特性O(shè)ptional類處理空值判斷回避空指針異常應(yīng)用的詳細內(nèi)容,更多關(guān)于Optional類空值判斷回避空指針異常處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot多級緩存實現(xiàn)方案總結(jié)
所謂多級緩存,是指在整個系統(tǒng)架構(gòu)的不同系統(tǒng)層面進行數(shù)據(jù)緩存,以提升訪問速度,多級緩存就是為了解決項目服務(wù)中單一緩存使用不足的缺點,本文我們將給大家總結(jié)了SpringBoot多級緩存實現(xiàn)方案,需要的朋友可以參考下2023-08-08
java利用遞歸調(diào)用實現(xiàn)樹形菜單的樣式
這篇文章主要給大家介紹了關(guān)于java利用遞歸調(diào)用實現(xiàn)樹形菜單樣式的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-09-09
Java使用新浪微博API開發(fā)微博應(yīng)用的基本方法
這篇文章主要介紹了Java使用新浪微博API開發(fā)微博應(yīng)用的基本方法,文中還給出了一個不使用任何SDK實現(xiàn)Oauth授權(quán)并實現(xiàn)簡單的發(fā)布微博功能的實現(xiàn)方法,需要的朋友可以參考下2015-11-11
SpringBoot集成Drools打造動態(tài)規(guī)則管理模板引擎
本文詳解SpringBoot與Drools的整合方法,涵蓋依賴管理、規(guī)則文件編寫、KieService配置等,旨在通過規(guī)則引擎實現(xiàn)業(yè)務(wù)邏輯動態(tài)化管理,提升微服務(wù)應(yīng)用的靈活性、可維護性及快速部署能力,對SpringBoot Drools相關(guān)知識感興趣的朋友一起看看吧2025-07-07
Java Web使用Html5 FormData實現(xiàn)多文件上傳功能
這篇文章主要介紹了Java Web使用Html5 FormData實現(xiàn)多文件上傳功能,需要的朋友可以參考下2017-07-07
基于SpringBoot + Redis實現(xiàn)密碼暴力破解防護
在現(xiàn)代應(yīng)用程序中,保護用戶密碼的安全性是至關(guān)重要的,密碼暴力破解是指通過嘗試多個密碼組合來非法獲取用戶賬戶的密碼,為了保護用戶密碼不被暴力破解,我們可以使用Spring Boot和Redis來實現(xiàn)一些防護措施,本文將介紹如何利用這些技術(shù)來防止密碼暴力破解攻擊2023-06-06
Tomcat報錯:HTTP Status 500 (Wrapper cannot find servlet class)
這篇文章主要介紹了Tomcat報錯:HTTP Status 500 (Wrapper cannot find servlet class)解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11

