Optional是Java 8中引入的一个类,用于处理可能为null的值。它提供了一种优雅的方式来处理可能存在或不存在的值,并避免了空指针异常。

Optional并不是用于替代所有的null检查,而是用来处理特定场景下可能为空的值的情况。

Optional可以视为一个容器,它可以包含一个非空的值(存在),也可以为空(不存在)。通过使用Optional,我们可以明确地表达一个值可能不存在的情况,并且方便地对其进行处理。

以下是Optional类的一些常用方法:

  • orElseThrow(exceptionSupplier):获取Optional对象中的值,如果Optional对象为空则抛出通过指定的异常供应函数exceptionSupplier生成的异常。
  • map(function):对Optional对象中的值进行映射操作,返回一个新的Optional对象。
  • filter(predicate):对Optional对象中的值进行过滤操作,如果满足谓词条件则返回当前Optional对象,否则返回一个空的Optional对象。
  • of(value):创建一个包含指定非空值的Optional对象。
  • ofNullable(value):创建一个包含指定值的Optional对象,如果值为null,则创建一个空的Optional对象。
  • isPresent():检查Optional对象是否包含非空值,如果值存在则返回true,否则返回false。
  • get():获取Optional对象中的值,如果Optional对象为空则抛出NoSuchElementException异常。
  • orElse(other):获取Optional对象中的值,如果Optional对象为空则返回指定的默认值other。
  • orElseGet(supplier):获取Optional对象中的值,如果Optional对象为空,则通过指定的供应函数supplier来生成一个默认值。

下面是一个使用Optional的示例:

import java.util.Optional;

public class OptionalDemo {
    public static void main(String[] args) {
        // 创建一个包含非空值的Optional对象
        Optional<String> optional = Optional.of("Hello, World!");

        // 检查Optional对象是否包含值
        if (optional.isPresent()) {
            // 获取Optional对象中的值
            String value = optional.get();
            System.out.println("Value: " + value);
        }
        
        // 使用filter方法对Optional对象中的值进行过滤操作
        Optional<String> filteredOptional = optional.filter(str -> str.length() > 10);
        System.out.println("Filtered Value: " + filteredOptional.orElse("No Value"));
        
        // 使用orElse方法获取Optional对象中的值,如果不存在则返回默认值
        String result = emptyOptional.orElse("Default Value");
        System.out.println("Result: " + result);

        // 使用map方法对Optional对象中的值进行映射操作
        Optional<String> mappedOptional = optional.map(str -> str.toUpperCase());
        System.out.println("Mapped Value: " + mappedOptional.orElse("No Value"));
    }
}

使用Optional可以使代码更加清晰、可读,并且减少了空指针异常的风险。

附上JAVA11版的Optional中文官方API:https://www.apiref.com/java11-zh/java.base/java/util/Optional.html 

Optional_java