在Java中,你可以使用Optional类来包装可能为空的对象引用,以此来消除对显式的空值检查的需要,并防止空指针异常。以下是一些基本的用法:
1.使用Optional.ofNullable(T value)来创建一个可能为空的Optional对象。
2.使用Optional.of(T value)来创建一个肯定不为空的Optional对象(如果值为空,则会抛出异常)。
3.使用Optional.empty()来创建一个空的Optional对象。
4.使用isPresent()来检查是否有值。
5.使用orElse(T other)或orElseGet(Supplier<? extends T> supplier)来提供一个默认值。
6.使用orElseThrow(Supplier<? extends X> exceptionSupplier)来抛出一个异常。
7.使用ifPresent(Consumer<? super T> consumer)来在值不为空的情况下执行操作。
8.使用filter(Predicate<? super T> predicate)来进行条件判断。
9.使用map(Function<? super T, ? extends U> mapper)来进行值的转换。
10.使用flatMap(Function<? super T, Optional<U>> mapper)来进行扁平化转换。
这是一个简单的例子,展示了如何使用Optional:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// 创建一个可能为空的Optional对象
Optional<String> optional = Optional.ofNullable(null);
// 检查是否有值
if(optional.isPresent()) {
System.out.println("Value is present");
} else {
System.out.println("Value is not present");
}
// 提供默认值
String value = optional.orElse("Default Value");
System.out.println(value);
// 抛出异常
String valueOrThrow = optional.orElseThrow(() -> new Exception("Value is empty"));
// 执行操作
optional.ifPresent(v -> System.out.println("Value: " + v));
// 过滤
Optional<String> filtered = optional.filter(s -> s != null);
// 映射
Optional<String> mapped = optional.map(s -> s.toUpperCase());
// 扁平化映射
Optional<String> flatMapped = optional.flatMap(Main::getAnotherOptional);
}
private static Optional<String> getAnotherOptional(String s) {
return Optional.ofNullable(s + " Changed");
}
}
在这个例子中,我们首先创建了一个可能为空的Optional对象,然后检查它的存在性,提供了一个默认值,抛出了一个异常,执行了一个操作,过滤了值,并进行了映射和扁平化映射。这是使用Optional的基本方式。