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,Value,println,optional,orElse From: https://blog.51cto.com/u_16226278/7200116