官方引入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");