Optional的使用

781 阅读1分钟

一,Optional概述

java8 引入了Optional类,主要是为了解决NPE问题,正如Brian Goetz和Steward Marks所说的那样:我们的目的是为库方法的返回类型提供一种有限的机制,其中需要一种明确的方式来表示“无结果”,并且对于这样的方法使用null绝对可能导致错误。

二,Optional方法详解

orElse方法

特性:不存在则返回另外一个值

 public T orElse(T other) {
      return value != null ? value : other;
  }

示例:

        //如果hello不存在则打印world
      Optional<String> optionalS2  = Optional.empty();
      System.out.println(optionalS2.orElse("world"));

orElseGet方法

特性:与orElse方法同义,可接Supplier接口

示例:

  System.out.println(optionalS2.orElseGet(() -> "ni hao"));

三,推荐使用场景以及警示

比如从数据库查询了一个list,当list为空的时候,建议返回一个空的list,而不是null,因为使用null可能造成NPE问题。 示例

    //MOCK 返回的结果
    Employee employee = new Employee("zhansan", 10);
    Company company = new Company();
    company.setEmpList(Arrays.asList(employee));

    //如果Employee为空,则返回一个空的集合
    Optional<Company> optionalCompany = Optional.ofNullable(company);
    return optionalCompany.map((theCompany) -> theCompany.getEmpList()).orElse(Collections.emptyList());

警示

由于Optional未实现Serializable接口,因此尽量避免把Optional作为参数传递.