Java8 Optional優(yōu)雅空值判斷的示例代碼
先介紹一下API,與其他文章不同的是,本文采取類比的方式來(lái)講,同時(shí)結(jié)合源碼。而不像其他文章一樣,一個(gè)個(gè)API羅列出來(lái),讓人找不到重點(diǎn)。
1、Optional(T value),empty(),of(T value),ofNullable(T value)
這四個(gè)函數(shù)之間具有相關(guān)性,因此放在一組進(jìn)行記憶。
先說(shuō)明一下,Optional(T value),即構(gòu)造函數(shù),它是private權(quán)限的,不能由外部調(diào)用的。其余三個(gè)函數(shù)是public權(quán)限,供我們所調(diào)用。那么,Optional的本質(zhì),就是內(nèi)部?jī)?chǔ)存了一個(gè)真實(shí)的值,在構(gòu)造的時(shí)候,就直接判斷其值是否為空。好吧,這么說(shuō)還是比較抽象。直接上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("取值錯(cuò)誤");
if (null != user && null != user.getAddress() && null != user.getAddress().getName()) {
return user.getAddress().getName();
}
throw new Exception("取值錯(cuò)誤");
}
public static String upgrade01(User user) throws Exception {
return Optional.ofNullable(user)
.map(user1 -> user1.getAddress())
.map(user2 -> user2.getName())
.orElseThrow(() -> new Exception("取值錯(cuò)誤"));
}
方式二:
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("取值錯(cuò)誤");
}
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
計(jì)算Java數(shù)組長(zhǎng)度函數(shù)的方法以及代碼分析
在本篇內(nèi)容里,小編給大家整理了關(guān)于計(jì)算Java數(shù)組長(zhǎng)度函數(shù)的方法以及代碼分析內(nèi)容,有興趣的朋友么可以學(xué)習(xí)參考下。2022-11-11
Java+OpenCV實(shí)現(xiàn)圖片中的人臉識(shí)別
這篇文章主要介紹了如何利用java?opencv實(shí)現(xiàn)人臉識(shí)別功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
SpringBoot之Java配置的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot之Java配置的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Springboot靜態(tài)資源訪問(wèn)實(shí)現(xiàn)代碼解析
這篇文章主要介紹了Springboot靜態(tài)資源訪問(wèn)實(shí)現(xiàn)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

