Oracle官方引入Optional的意图

官方引入Optional的本意是使用它来更优雅的处理中最常见的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另外的一个好处就是它本身是支持流式编程。








