詳解Java如何判斷一個對象是否為空
我們在剛開始學(xué)習(xí)Java的時候,遇到過最多的異常肯定是臭名昭著的空指針異常(NullPointerException),可以說它陪伴了我們整個初學(xué)階段。字符串、對象、集合等等一不留神就容易出現(xiàn)空指針異常! 那么如何優(yōu)雅的判斷一個對象是否為空并且減少空指針異常呢? 今天來介紹一個容器類——Optional
Optional介紹
Optional是一個容器類,它只有兩種情況:
- 要么包含一個非空對象
- 要么為空
它有助于編寫更健壯的代碼,以處理可能為空的值,而不必?fù)?dān)心空指針異常!
Optional用法
Optional的創(chuàng)建
Optional有以下兩種常見的創(chuàng)建方法:
- Optional.of(T value):創(chuàng)建一個包含非空值的Optional,如果value為null,則拋出NullPointerException
- Optional.ofNullable(T value):創(chuàng)建一個Optional,允許value為null
判斷Optional容器中是否包含對象
isPresent(): 返回一個布爾值,如果Optional容器中包含一個非空對象則返回true,否則返回false
獲取Optional容器的對象
- get(): 如果Optional包含非空值,返回該值;否則拋出NoSuchElementException
- orElse(T other): 如果Optional為空,返回指定的默認(rèn)值other
- orElseGet(Supplier<? extends T> other): 如果Optional為空,使用提供的Supplier函數(shù)生成默認(rèn)值
- orElseThrow(Supplier<? extends X> exceptionSupplier): 如果Optional為空,拋出由提供的Supplier函數(shù)生成的異常
過濾
filter(Predicate<? super T> predicate): 如果Optional包含非空值且滿足predicate條件,則返回當(dāng)前Optional,否則返回一個空Optional。
映射
- map(Function<? super T, ? extends U> mapper): 如果Optional包含非空值,應(yīng)用mapper函數(shù)并返回新的Optional。
- flatMap(Function<? super T, Optional> mapper): 類似于map,但允許mapper函數(shù)返回Optional。
Optional示例
假如我們有一個User類,可以使用Optional來處理可能為空的User對象。User類結(jié)構(gòu)如下:
public class User { private String name; public User(String name) { this.name = name; } public String getName() { return name; } }
示例:創(chuàng)建Optional
Optional userOptional = Optional.ofNullable(new User("張三"));
示例:判斷Optional是否包含對象
if (userOptional.isPresent()) { System.out.println("用戶存在:" + userOptional.get().getName()); } else { System.out.println("用戶不存在"); }
示例:獲取Optional容器的對象
User user = userOptional.orElse(new User("李四")); System.out.println("User: " + user.getName());
示例:過濾
Optional<User> filteredUserOptional = userOptional.filter(u -> u.getName().startsWith("張")); if (filteredUserOptional.isPresent()) { System.out.println("結(jié)果:" + filteredUserOptional.get().getName()); } else { System.out.println("未找到對應(yīng)用戶"); }
示例:映射
Optional<String> userNameOptional = userOptional.map(User::getName); userNameOptional.ifPresent(name -> System.out.println("用戶名為: " + name));
使用場景總結(jié)
- 當(dāng)你從某個方法返回一個值,但該值可能為空,而調(diào)用者需要明確知道值是否存在。
- 在處理方法參數(shù)時,你可以用Optional來表示某個參數(shù)可以為空,以提醒調(diào)用者可能會傳入null。
- 避免繁瑣的null檢查和條件語句,使代碼更簡潔和可讀!
以上就是詳解Java如何判斷一個對象是否為空的詳細(xì)內(nèi)容,更多關(guān)于Java判斷對象是否為空的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot實(shí)現(xiàn)發(fā)送QQ郵箱
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)發(fā)送QQ郵箱,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06springboot?通過博途獲取plc點(diǎn)位的數(shù)據(jù)代碼實(shí)現(xiàn)
這篇文章主要介紹了springboot?通過博途獲取plc點(diǎn)位的數(shù)據(jù)的代碼實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08詳解獲取Spring MVC中所有RequestMapping以及對應(yīng)方法和參數(shù)
本篇文章主要介紹了詳解獲取Spring MVC中所有RequestMapping以及對應(yīng)方法和參數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03