Java8 Optional優(yōu)雅空值判斷的示例代碼
先介紹一下API,與其他文章不同的是,本文采取類比的方式來講,同時結(jié)合源碼。而不像其他文章一樣,一個個API羅列出來,讓人找不到重點。
1、Optional(T value),empty(),of(T value),ofNullable(T value)
這四個函數(shù)之間具有相關(guān)性,因此放在一組進(jìn)行記憶。
先說明一下,Optional(T value),即構(gòu)造函數(shù),它是private權(quán)限的,不能由外部調(diào)用的。其余三個函數(shù)是public權(quán)限,供我們所調(diào)用。那么,Optional的本質(zhì),就是內(nèi)部儲存了一個真實的值,在構(gòu)造的時候,就直接判斷其值是否為空。好吧,這么說還是比較抽象。直接上Optional(T value)構(gòu)造函數(shù)的源碼,如下圖所示

方式一:
public static void implement(User user) throws Exception {
// 原始 ---> 01
before01(user);
// 優(yōu)化 ---> 01
upgrade01(user);
}
public static String before01(User user) throws Exception {
// if(user!=null){
// if(user.getAddress()!=null){
// Address address = user.getAddress();
// if(address.getName()!=null){
// return address.getName();
// }
// }
// }
// throw new Exception("取值錯誤");
if (null != user && null != user.getAddress() && null != user.getAddress().getName()) {
return user.getAddress().getName();
}
throw new Exception("取值錯誤");
}
public static String upgrade01(User user) throws Exception {
return Optional.ofNullable(user)
.map(user1 -> user1.getAddress())
.map(user2 -> user2.getName())
.orElseThrow(() -> new Exception("取值錯誤"));
}
方式二:
public static void before02(User user){
if (null != user){
test();
}
}
public static void upgrade02(User user){
Optional.ofNullable(user).ifPresent(user1 -> test());
}
方式三:
public static User before03(User user) throws Exception{
if(user!=null){
String name = user.getName();
if("King".equals(name)){
return user;
}
}else{
user = new User();
user.setName("King");
return user;
}
throw new Exception("取值錯誤");
}
public static void upgrade03(User user){
Optional.ofNullable(user)
.filter(user1 -> "King".equals(user.getName()))
.orElseGet(() -> {
User user2 = new User();
user2.setName("King");
return user2;
});
}
到此這篇關(guān)于Java8 Optional優(yōu)雅空值判斷的文章就介紹到這了,更多相關(guān)Java8 Optional空值判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
計算Java數(shù)組長度函數(shù)的方法以及代碼分析
在本篇內(nèi)容里,小編給大家整理了關(guān)于計算Java數(shù)組長度函數(shù)的方法以及代碼分析內(nèi)容,有興趣的朋友么可以學(xué)習(xí)參考下。2022-11-11
Springboot靜態(tài)資源訪問實現(xiàn)代碼解析
這篇文章主要介紹了Springboot靜態(tài)資源訪問實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06

