Oracle官方引入Optional的意圖
官方引入Optional的本意是使用它來更優雅的處理JAVA中最常見的NullPointException問題。舉一個簡單的例子,如果不使用Optional,下面的這個語句可能拋出異常:
String version = computer.getSoundcard().getUSB().getVersion();
當然你可以使用如下的方式來做check:
String version = "UNKNOWN";
if(computer != null){
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null){
USB usb = soundcard.getUSB();
if(usb != null){
version = usb.getVersion();
}
}
}
很顯然上面這種方式導致代碼的可讀性變低,而且你怎么能保證把所有的返回值都去check一遍? 所以Java 8中給出了Optional這個解決方案。 如果使用Optional上面的語句就可以寫成如下的形式:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
總結一下Optional的意圖和作用
- Optional并不能解決NullPointerException問題,但是它提供了一種機制,這種機制可以讓方法的調用者,或者Optional變量的使用這非常明確的知道這個變量中有可能不存在任何值。這樣就會強迫調用這去考慮,如果沒有值自己應該怎么去處理。
- Optional另外的一個好處就是它本身是支持流式編程。






