欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

详解Java8特性之Optional类

程序员文章站 2022-06-07 11:06:07
...

Optional类

在Java中,可能我们看过最多的异常就是java.lang.NullPointerException,这是使用null引用去调用一个方法或者字段的结果。

Java 8中提供了java.util.Optional<T> 类,是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且
可以避免空指针异常。

Optional常用方法有以下这些:

  • Optional.of(T t) : 创建一个 Optional 实例
  • Optional.empty() : 创建一个空的 Optional 实例
  • Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
  • T get():获取Optional中的值
  • isPresent() : 判断是否包含值
  • orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
  • orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
  • map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
  • flatMap(Function mapper):与 map 类似,要求返回值必须是Optional

Optional的增加操作和他的创建一起,即增加一个元素便是创建一个Optional实例。下面是创建容器的例子

@Test
public void test() {
    // Optional.of(T t)
    Optional<String> optional = Optional.of("321");
    // 下面这句代码会报NullPointerException
    Optional<String> optional2 = Optional.of(null);

    // Optional.empty()
    Optional<Object> emptyOptional = Optional.empty();

    // Optional.ofNullable(T t)
    Optional<String> nullableOptional = Optional.ofNullable("123");
    // 下面这句代码不会报错,因为ofNullable(T t)创建Optional时允许t为null,相当于Optional.empty()
    Optional<Object> nullableOptional2 = Optional.ofNullable(null);

}

通过get()方法可以从Optional实例中获取到存放的值。如

@Test
public void test() {
    Optional<String> optional = Optional.of("123");
    String str = optional.get();
    System.out.println(str);//输出123
}

isPresent()判断是否包含值,有点像是我们判断一个集合的size是否大于0。如

@Test
public void test() {
    Optional<String> optional = Optional.of("123");
    boolean b = optional.isPresent();
    System.out.println(b);// 输出true

    optional = Optional.ofNullable(null);
    b = optional.isPresent();
    System.out.println(b);// 输出false
}

其它方法就不一一试验了,总之这个Optional类其实就是一个封装了一个元素的容器,而这个元素可以是null也可以是其它任意类型的。