美文网首页
java8中的Optional的意义

java8中的Optional的意义

作者: 夜月河色 | 来源:发表于2020-08-06 13:07 被阅读0次

直接从问题、需求出发。

对于这样一串代码:
String version = computer.getSoundcard().getUSB().getVersion();

在任意一个方法被调用时,都可能抛出 NullPointException 空指针异常。

所以这串代码的正确书写方式是:
String version = "UNKNOWN";
if(computer != null){
  Soundcard soundcard = computer.getSoundcard();
  if(soundcard != null){
    USB usb = soundcard.getUSB();
      if(usb != null){
        version = usb.getVersion();
      }
  }
}

问题来了,这样写逻辑上没问题,但是代码不美观、且不友好。
Optional就是为了解决重复写if,重复判断null值这个问题而来的。

Optional的写法:
String version = Optional.ofNullable(computer)
                      .map(Computer::getSoundcard) 
                      .map(Soundcard::getUSB)
                      .map(USB::getVersion)
                      .orElse("UNKNOWN");
解释:
String version = Optional.ofNullable(computer)

将computer放进optional中

.map(Computer::getSoundcard)

将getSoundcard的结果值(不管是否为null)放进新的optional中

.map(Soundcard::getUSB)

将getUSB的结果值(不管是否为null)放进新的optional

.map(USB::getVersion)

将getVersion的结果值(不管是否为null)放进新的optional

.orElse("UNKNOWN");

最后,orElse()如果获取到的值不为null,则返回该值;如果是null,使用“UNKNOWN”代替最终的返回结果。

意义:

Optional的意义在于,将需要重复判断null的过程,放在最后orElse()方法中判断一次,并给出在获取不到最终目标值的情况下的替代方案。

注意:

上面的代码很明显可以看出,要实现该过程,需要lambda函数式编程配合。

相关文章

  • java8中的Optional的意义

    直接从问题、需求出发。 对于这样一串代码: 在任意一个方法被调用时,都可能抛出 NullPointExceptio...

  • Optional

    Java8中Optional为util包中一个类 创建Optional对象 Optional.of() 传入对象不...

  • Optional类

    Optional类为Java8新引入的一个类,Optional是一个可以为null的容器对象,Optional中的...

  • 深入JDK中的Optional

    概述:Optional最早是Google公司Guava中的概念,代表的是可选值。Optional类从Java8版本...

  • Optional源码分析(未完)

    Optional源码分析(未完) Optional 类是Java8的新特性,Optional是一个可以为null的...

  • Java8新特性系列(时间/日期)

    上期我们介绍了Java8中的Optional,本期我们介绍Java8中新的时间日期API。 JSR 在讲之前,首先...

  • [Java8]如何正确使用Optional

    转Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多...

  • JAVA8新特性-Optional类解决NPE问题

    ** JAVA8新特性-Optional类解决NPE问题** API介绍 1、Optional(T value),...

  • Java8特性之Optional

    一、什么是Optional Optional从名字上看,意思应该是可选项的意思,那么在Java8的实际使用中,我们...

  • java8 - optional

    optional 是java8的新特性,The purpose of the class is to provid...

网友评论

      本文标题:java8中的Optional的意义

      本文链接:https://www.haomeiwen.com/subject/dupzrktx.html