Java8新特性Optional類處理空值判斷回避空指針異常應用
一、序言
空值異常是應用運行時常見的異常,傳統(tǒ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;
}
相關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變量使用前不確定是否為空,因此需要邏輯判斷。兩層邏輯判斷之后,方能安心調用獲取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è)務邏輯更清晰。
Optional使用方法引用的語法,屬于Lambda表達式的一種。
三、小結
本文介紹了Optional類在處理空值判斷場景的應用,通過對比的方式,將Optional的優(yōu)點展現(xiàn)出來。從場景入手學技術比單調的技術講解更有趣味。
以上就是Java8新特性Optional類處理空值判斷回避空指針異常應用的詳細內容,更多關于Optional類空值判斷回避空指針異常處理的資料請關注腳本之家其它相關文章!
相關文章
elasticsearch如何根據(jù)條件刪除數(shù)據(jù)
Elasticsearch是一個基于Apache Lucene?的開源搜索引擎,無論在開源還是專有領域,Lucene 可以被認為是迄今為止最先進、性能最好的、功能最全的搜索引擎庫,這篇文章主要介紹了elasticsearch如何根據(jù)條件刪除數(shù)據(jù),需要的朋友可以參考下2023-03-03
Spring Boot 實現(xiàn)Restful webservice服務端示例代碼
這篇文章主要介紹了Spring Boot 實現(xiàn)Restful webservice服務端示例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11

