美文网首页
Optional避免空指针的用法

Optional避免空指针的用法

作者: Winter_Soldier | 来源:发表于2018-07-13 20:59 被阅读0次

从一个简单的用例开始。在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException:

String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();

在这个小示例中,如果我们需要确保不触发异常,就得在访问每一个值之前对其进行明确地检查:

if (user != null) {
    Address address = user.getAddress();
    if (address != null) {
        Country country = address.getCountry();
        if (country != null) {
            String isocode = country.getIsocode();
            if (isocode != null) {
                isocode = isocode.toUpperCase();
            }
        }
    }
}

Optional 类的链式方法

为了更充分的使用 Optional,你可以链接组合其大部分方法,因为它们都返回相同类似的对象。

我们使用 Optional 重写最早介绍的示例。

首先,重构类,使其 getter 方法返回 Optional 引用:

public class User {
    private Address address;

    public Optional<Address> getAddress() {
        return Optional.ofNullable(address);
    }

    // ..
}
public class Address {
    private Country country;

    public Optional<Country> getCountry() {
        return Optional.ofNullable(country);
    }

    //.. 
}

现在可以删除 null 检查,替换为 Optional 的方法:

@Test
public void whenChaining_thenOk() {
    User user = new User("anna@gmail.com", "1234");

    String result = Optional.ofNullable(user)
      .flatMap(u -> u.getAddress())
      .flatMap(a -> a.getCountry())
      .map(c -> c.getIsocode())
      .orElse("default");

    assertEquals(result, "default");
}

代码可以通过方法引用进一步缩减:

String result = Optional.ofNullable(user)
  .flatMap(User::getAddress)
  .flatMap(Address::getCountry)
  .map(Country::getIsocode)
  .orElse("default");

相关文章

  • Optional避免空指针的用法

    从一个简单的用例开始。在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerExc...

  • Optional工具

    描述: 可以用Optional来避免空指针。 构造方法: 其他常用方法

  • JAVA8- Optional-用法浅析

    JAVA8- Optional-用法浅析 简介 java8新引入optional特性,官方说法是更优雅的处理空指针...

  • java 8中使用Optional 避免空指针

    Optional 类的引入要求程序员强制处理和避免空指针。Optional 需要使用在可能为null的变量上。很多...

  • 4. Java8 Optional 容器类

    Optional容器类 用于尽量避免空指针异常 1.方法 静态方法 实例 empty 其他常用方法

  • 一起来学Java8(六)——Optional

    Optional类是Java8新增的一个类,其作用可以有效避免空指针异常。 Optional类的代码比较简单,很容...

  • 5.Java8新特性 - Optional容器类

    一.Optional简介 Optional是一个容器类,代表一个值存在或者不存在,可以避免空指针异常 二.常用方法...

  • JDK8-Optional

    Optional是JDK8中提供用于包含未知对象的工具类,即可以利用Optional包装对象来避免繁琐的空指针检查...

  • Java 9 改进的 Optional 类

    Optional 类在 Java 8 中引入,Optional 类的引入很好的解决空指针异常。 Optional ...

  • Java8-Lambda编程[3] Optional接口

    引言 Optional意为可选,我们前面已经提及过,主要是为了替代null的使用,避免空指针异常(NullPoin...

网友评论

      本文标题:Optional避免空指针的用法

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