您的位置:

Java Optional使用指南

Java 8 引入了一个新的类——Optional,它可以有效地解决null指针异常。Optional可以提高代码的可读性,降低代码出现空指针异常的风险。

一、Optional简介

Optional是一个容器,它可以保存任意类型的值。Optional可以包含一个非null的值,也可以包含null。当Optional包含一个非null的值时,调用者可以使用get()方法取出这个值;如果Optional为空,那么调用者可以指定一个默认值来代替这个null。Optional提供了一些有用的API来方便程序员的编程。

二、Optional的使用

1、创建Optional对象

Optional类中提供了如下几种用于创建Optional对象的静态工厂方法。

// 创建一个值为空的Optional对象
Optional emptyOptional = Optional.empty();

// 创建一个值非空的Optional对象
Optional notNullOptional = Optional.of("value");

// 创建一个值允许为空的Optional对象
Optional
    nullableOptional = Optional.ofNullable("value");
Optional
     emptyNullableOptional = Optional.ofNullable(null);

    
   
  

2、判断Optional是否为空

Optional类中提供了isPresent()方法,用来判断Optional是否非空。如果值存在则返回true,否则false。

Optional optional = Optional.ofNullable("value");
if (optional.isPresent()) {
    System.out.println("Optional不为空");
}

  

3、获取Optional中的值

Optional类提供了get()方法来获取Optional中的值。如果Optional不为空,则返回封装的对象;否则抛出NoSuchElementException。

Optional optional = Optional.ofNullable("value");
String value = optional.get();
System.out.println(value);

  

4、当Optional为空时,设定默认值

Optional提供了一个orElse()方法,当Optional为空时可以指定一个默认值。

Optional nullableOptional = Optional.ofNullable(null);
String orElse = nullableOptional.orElse("default");
System.out.println(orElse);

  

5、当Optional为空时,使用Supplier提供的默认值

orElseGet()方法与orElse()方法类似,当Optional为空时提供一个默认值。但是提供默认值的方式不同,orElse()方法会在Optional为空时创建默认值并返回,orElseGet()则会接受一个Supplier函数式接口,在Optional为空时,调用Supplier提供的方法进行计算并返回计算结果。

Optional nullableOptional = Optional.ofNullable(null);
String orElse = nullableOptional.orElseGet(() -> "supplier");
System.out.println(orElse);

  

6、当Optional为空时抛出异常

orElseThrow()方法与orElse()方法类似,当Optional为空时会抛出一个由Supplier函数式接口提供的异常对象,或者抛出提供的异常类的异常对象。

Optional nullableOptional = Optional.ofNullable(null);
String orElse = nullableOptional.orElseThrow(() -> new RuntimeException("异常"));

  

三、Optional的优势及适用场景

Optional为程序员提供了一种新的处理null的方式,它的引入,可以更好地将代码中的某些特殊情形暴露出来,有助于代码的维护和调试。

Optional可以在某些情况下提高代码的可读性,可以更加清楚地表达出null的含义,避免了很多的判null处理,从而简化了代码。

Optional适用于返回结果为空的情况,并且这种空情况必须详细处理,因为使用Optional会强制程序员处理掉这种情况,从根本上解决null引起的问题。