1. 程式人生 > >Java8 如何正確使用Optional

Java8 如何正確使用Optional

Optional是Java8提供的為了解決null安全問題的一個API。善用Optional可以使我們程式碼中很多繁瑣、醜陋的設計變得十分優雅。

這篇文章是建立在你對Optional的用法有一定了解的基礎上的,如果你還不太瞭解Optional,可以先去看看相關教程,或者查閱Java文件。

使用Optional,我們就可以把下面這樣的程式碼進行改寫。

不過,千萬不要改寫成這副樣子。

這樣改寫非但不簡潔,而且其操作還是和第一段程式碼一樣。

無非就是用isPresent方法來替代u==null。這樣的改寫並不是Optional正確的用法,我們再來改寫一次。

這樣才是正確使用Optional的姿勢。那麼按照這種思路,我們可以安心的進行鏈式呼叫,而不是一層層判斷了。看一段程式碼:

由於種種原因(比如:比賽還沒有產生冠軍、方法的非正常呼叫、某個方法的實現裡埋藏的大禮包等等),我們並不能開心的一路comp.getResult().getChampion().getName()到底。

而其他語言比如kotlin,就提供了在語法層面的操作符加持:comp?.getResult()?.getChampion()?.getName()。所以講道理在Java裡我們怎麼辦!

讓我們看看經過Optional加持過後,這些程式碼會變成什麼樣子。

這就很舒服了。Optional給了我們一個真正優雅的Java風格的方法來解決null安全問題。雖然沒有直接提供一個操作符寫起來短,但是程式碼看起來依然很爽很舒服。更何況?.這樣的語法好不好看還見仁見智呢。

還有很多不錯的使用姿勢,比如為空則不列印可以這麼寫:

Optional的魅力還不止於此,Optional還有一些神奇的用法,比如Optional可以用來檢驗引數的合法性。

這樣寫引數合法性檢測,應該足夠優雅了吧。

相關推薦

java8使用Optional來避免空指標異常(簡化程式碼)

在最近的開發中遇到不少java.lang.NullPointerException異常 ,而為了避免這個異常,不免要利用if-else來進行判斷。比如如下的程式碼: public static void main(String[] args) { Lis

Java8Optional類定義與使用方法詳解

概述 到目前為止,著名的NullPointerException是導致Java應用程式失敗的最常見原因。過去,為了解決空指標異常,Google公司著名的Guava專案引入了Optional類,Guava通過使用檢查空值的方式來防止程式碼汙染,它鼓勵程式設計師寫更乾淨的程式碼。受到Goo

Java8Optional類(避免空指標異常)

Optional<T>類(java.util.Optional)是一個容器類,代表一個值存在或不存在,原來用null表示一個值不存在,現在Optional可以更好的表達這個概念。並且可以

Java8Optional:如何幹掉空指標?

[toc] ## Optional概述 Optional 是個容器:它可以儲存型別T的value,或者僅僅儲存null。Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測,很好地解決了空指標異常處理的問題,比如可以使用`isPresent()`方法判斷value是否為null,使用`get

講講Java8Optional

# 前言 Java 8中引入了 `Optional` 類來解決 `NullPointerException` 與繁瑣的 `null` 檢查,該類首次出現在 `Guava`。Java 8 才成為類庫中的一部分。 # 入門 `Optional` 是一個封裝值的類,用於儲存型別為 `T` 的值;本質上,`Op

[轉] 使用 Java8 Optional正確姿勢

rac other 不包含 pty zab optional 集合 list posit [From] https://unmi.cc/proper-ways-of-using-java8-optional/ 我們知道 Java 8 增加了一些很有用的 API, 其中一

使用 Java8 Optional正確姿勢

Optional我們知道 Java 8 增加了一些很有用的 API, 其中一個就是 Optional. 如果對它不稍假探索, 只是輕描淡寫的認為它可以優雅的解決 NullPointException 的問題, 於是代碼就開始這麽寫了Optional<User> user = ...... if (

Java8 Optional正確使用方式

1.當我們還在以如下幾種方式使用 Optional 時, 就得開始檢視自己了 呼叫 isPresent() 方法時 呼叫 get() 方法時 Optional 型別作為類/例項屬性時 Optional 型別作為方法引數時 isPresent() 與 obj

Java8 如何正確使用Optional

Optional是Java8提供的為了解決null安全問題的一個API。善用Optional可以使我們程式碼中很多繁瑣、醜陋的設計變得十分優雅。 這篇文章是建立在你對Optional的用法有一定了解的基礎上的,如果你還不太瞭解Optional,可以先去看看相關教程,或

Java8 Optional正確使用姿勢

我們知道 Java 8 增加了一些很有用的 API, 其中一個就是 Optional. 如果對它不稍假探索, 只是輕描淡寫的認為它可以優雅的解決 NullPointException 的問題, 於是程式碼就開始這麼寫了Optional<User> user = .

Java8 Optional

鏈接 詳細 pub pre lan ont int 存在 print Optional用於包含非空對象的容器對象。Optional對象,用於表示使用不存在null值。這個類有各種實用的方法,以方便代碼來處理為可用或不可用,而不是檢查null值。它是Java引入, 是類似於在

Java8新特性之Optional

.get value api new java代碼 optional padding 正常 line 空指針異常一直是困擾Java程序員的問題,也是我們必須要考慮的。當業務代碼中充滿了if else判斷null 的時候程序變得不再優雅,在Java8中提供了Optional類

Java8新特性之:Optional

java8 Optional 一. 用Optional取代null 1. Optional類 java.util.Optional<T>是一個封裝Optional值的類。 變量存在時,Optional類只是對類進行簡單的封裝。變量不存在時,缺失的值會被建模

java8正確使用姿勢

one sub get 字符串 AC uml hello ble handler ackage com.expgiga.Java8; import java.util.ArrayList; import java.util.Arrays; import java.uti

java8:(Optional

給定 ring 行操作 cep 使用 upper rac som 寫法 1.Optional: return user.map(u -> u.getOrders()).orElse(Collections.emptyList()) //上面避免了我們類似 java

Java8實戰》-第十章筆記(用Optional取代null)

用Optional取代null 如果你作為Java程式設計師曾經遭遇過NullPointerException,請舉起手。如果這是你最常遭遇的異常,請繼續舉手。非常可惜,這個時刻,我們無法看到對方,但是我相信很多人的手這個時刻是舉著的。我們還猜想你可能也有這樣的想法:“毫無疑問,我承認,對任何一位Java程

Java8新特性整理之Optional取代Null引用

Java8新特性整理之Optional取代Null引用   版權宣告:歡迎轉載!請註明出處! https://blog.csdn.net/u011726984/article/details/79315837 java8之前如何避免空指標異常 相信大家在開發中都會碰到Nul

java8新特性---Optional

轉自:https://blog.csdn.net/hwsdau/article/details/78791328 我們首先要判斷這個返回值是否為null,只有在非空的前提下才能將其作為其他方法的引數 Optional類是一個可以為null的容器物件。探求一下它的方法。 1、of 

java8--Optional

Optional用於包含非空物件的容器物件。Optional物件,用於表示使用不存在null值。這個類有各種實用的方法,以方便程式碼來處理為可用或不可用,而不是檢查null值。它是Java引入, 是類似於在 Guava 中的 Optional 。   示例程式碼: pack

JAVA8如何用Optional解決NPE問題詳解

引用處: JAVA8如何妙用Optional解決NPE問題詳解 引言 NPE(NullPointerException)是除錯程式最常見的異常。google一下有很多關於方法到底應該返回null還是new一個空物件的討論。 在文章的開頭,先說下NPE問題,NPE問題就是,我們在開