NPE(Null Pointer Exception)一直是我們最頭疼的問題,也是最容易忽視的地方。NPE常是導(dǎo)致Java應(yīng)用程序失敗的最常見的原因。在日常研發(fā)工作中,經(jīng)常會處理各種變量、集合,但在使用的過程中,往往要進行空判斷,不然會出現(xiàn)NPE。
Optional類實際上是個容器:它可以保存類型T的值,或者僅僅保存null。Optional 類的引入很好的解決空指針異常。Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測。盡量避免在程序中直接調(diào)用Optional對象的get()和isPresent()方法,避免使用Optional類型聲明實體類的屬性。
Optional.of(T t) : 創(chuàng)建一個 Optional 實例
Optional.empty() : 創(chuàng)建一個空的 Optional 實例
Optional.ofNullable(T t):若 t 不為 null,創(chuàng)建 Optional 實例,否則創(chuàng)建空實例
isPresent() : 判斷是否包含值
orElse(T t) : 如果調(diào)用對象包含值,返回該值,否則返回t
orElseGet(Supplier s) :如果調(diào)用對象包含值,返回該值,否則返回 s 獲取的值
map(Function f): 如果有值對其處理,并返回處理后的Optional,否則返回Optional.empty()
flatMap(Function mapper):與 map 類似,要求返回值必須是Optional
如何使用Optional類
下面代碼在兩個常用場景,對比使用Optional類后的代碼,可以看出,代碼簡潔很多。
第一個場景:判斷是否為空
package com.java.bitmap;
import java.util.Optional;
public class OptionalDemo {
public static void main(String[] args) {
String name="kerry";
// common way
if (name!=null&&name.length()!=0){
System.out.println(name.length());
}
//use optional way
System.out.println(Optional.ofNullable(name).orElse("").length());
}
}
第二個場景:遍歷list對象
public static void listIterator(List<Integer> list){
// common way
if (list!=null&&list.size()!=0){
for (Integer tmp:list) {
System.out.println(tmp);
}
}
//use optional way
Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(tmp->{System.out.println(tmp);});
}
第三個場景:
public User getUser(User user) throws Exception{
if(user!=null){
String name = user.getName();
if("zhangsan".equals(name)){
return user;
}
}else{
user = new User();
user.setName("zhangsan");
return user;
}
}
public User getUser(User user) {
return Optional.ofNullable(user)
.filter(u->"zhangsan".equals(u.getName()))
.orElseGet(()-> {
User user1 = new User();
user1.setName("zhangsan");
return user1;
});
}
orElseGet和orElse相似,都可以自定義類型返回,前者支持lamaba表達式。
————————————————1
咨詢熱線:
86-592-5151555
地址: 廈門市集美區(qū)軟件園三期A3棟504室
QQ:1039899831
固話:86-592-5151555
手機:18020730588(賴先生)
官網(wǎng):m.haymarketdoctors.com
Copyright © 2000-2021 m.haymarketdoctors.com
游戲作品版權(quán)歸原作者享有,如無意之中侵犯了您的版權(quán),請您按照《版權(quán)保護投訴指引》來信告知,本網(wǎng)站將應(yīng)您的要求刪除。