您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在Java8中使用Optional干掉空指針,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Optional 是個容器:它可以保存類型T的value,或者僅僅保存null。Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測,很好地解決了空指針異常處理的問題,比如可以使用isPresent()
方法判斷value是否為null,使用get()
方法獲取value值等等。
Optional的構造方法是私有的,實例不能new,可以使用靜態方法來創建:
// 1、創建一個包裝對象值為空的Optional對象 Optional<String> optStr = Optional.empty(); // 2、創建包裝對象值非空的Optional對象 Optional<String> optStr1 = Optional.of("optional"); // 3、創建包裝對象值允許為空的Optional對象 Optional<String> optStr2 = Optional.ofNullable(null);
看完Optional的概述,我們用一個簡單的例子說明一下:
下面這段代碼接收一個User對象,如果user為null,則拋出異常【這是一個非常常規的避免空指針異常的做法,如果沒有這步,getName會NPE】,否則返回user的name。
public String getName1(User user) { if (user == null) { throw new RuntimeException("user不能為null!"); } return user.getName(); }
如果使用Optional,應該怎么去處理呢?
public String getName2(User user) { return Optional.ofNullable(user) // 包裝user對象,如果user為null,則返回空的Optional對象 .map(User::getName) .orElseThrow(() -> new RuntimeException("user不能為null"));// 如果有值則返回,沒有則拋出異常。 }
Optional使用靜態的ofNullable
方法將user對象進行包裝,將可能為null的user對象保護起來。
public static <T> Optional<T> ofNullable(T value) { // empty() 方法 創建一個空的Optional對象, of對象在構造Optional的時候,value如果weinull,會引發NPE return value == null ? empty() : of(value); }
orElseThrow方法接收一個Supplier 對象,這里我們在lambda表達式那節已經說過了,不再贅述,感興趣可以查看:Java8的Lambda表達式,你會不?
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X { // 如果有值,直接返回值 if (value != null) { return value; } else { // 拋出異常,這個異常Supplier接口定義 throw exceptionSupplier.get(); } }
方法 | 描述 |
---|---|
empty | 返回一個空的 Optional 實例 |
filter | 如果值存在并且滿足提供的斷言, 就返回包含該值的 Optional 對象;否則返回一個空的 Optional 對象 |
map | 如果值存在,就對該值執行提供的 mapping 函數調用 |
flatMap | 如果值存在,就對該值執行提供的 mapping 函數調用,返回一個 Optional 類型的值,否則就返 回一個空的 Optional 對象 |
get | 如果該值存在,將該值用 Optional 封裝返回,否則拋出一個 NoSuchElementException 異常 |
ifPresent | 如果值存在,就執行使用該值的方法調用,否則什么也不做 |
isPresent | 如果值存在就返回 true,否則返回 false |
of | 將指定值用 Optional 封裝之后返回,如果該值為 null,則拋出一個 NullPointerException 異常 |
ofNullable | 將指定值用 Optional 封裝之后返回,如果該值為 null,則返回一個空的 Optional 對象 |
orElse | 如果有值則將其返回,否則返回一個默認值 |
orElseGet | 如果有值則將其返回,否則返回一個由指定的 Supplier 接口生成的值 |
orElseThrow | 如果有值則將其返回,否則拋出一個由指定的 Supplier 接口生成的異常 |
上述內容就是如何在Java8中使用Optional干掉空指針,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。