📅  最后修改于: 2023-12-03 15:16:31.805000             🧑  作者: Mango
Java 8引入了一个新的Optional类,该类可以更好地表示一个可能为null的值。在这个类中,还有一个非常有用的方法为orElseThrow()。
Optional是一个容器对象,代表一个值存在或不存在。在Java 8之前,当我们获取到一个返回值可能为null的结果时,为了防止空指针异常,我们常常会进行null检查,如下所示:
public String getValue() {
if (someCondition()) {
return someValue();
} else {
return null; // 可能返回null
}
}
// 调用方法时需要进行null检查
String value = getValue();
if (value != null) {
System.out.println(value);
}
而在Java 8中,我们可以使用Optional来避免空指针异常:
import java.util.Optional;
public Optional<String> getValue() {
if (someCondition()) {
return Optional.of(someValue());
} else {
return Optional.empty();
}
}
// 调用方法时使用Optional提供的方法
Optional<String> value = getValue();
value.ifPresent(System.out::println);
Optional的优点在于它的方法可以链式调用,使代码更加简洁易读。
当Optional中的值不存在时,我们可以使用orElseThrow()方法抛出一个异常。该方法的签名如下:
<T extends Throwable> T orElseThrow(Supplier<? extends T> exceptionSupplier) throws T
其中,exceptionSupplier是一个函数式接口,可以返回任意类型的异常。当Optional中的值不存在时,orElseThrow()方法将调用该函数生成一个异常并抛出。
例如,我们可以在以下示例中使用orElseThrow()方法来抛出一个异常。
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
Optional<String> optionalValue = Optional.empty();
String value = optionalValue.orElseThrow(() -> new RuntimeException("value is null"));
System.out.println(value);
}
}
上面的代码中,optionalValue为空,因此orElseThrow()方法将生成一个RuntimeException并将其抛出。运行该代码将输出以下异常信息:
Exception in thread "main" java.lang.RuntimeException: value is null
at OptionalExample.lambda$main$0(OptionalExample.java:8)
at java.base/java.util.Optional.orElseThrow(Optional.java:408)
at OptionalExample.main(OptionalExample.java:8)
orElseThrow()方法是Java 8中Optional类的一个非常有用的方法。它可以使得代码更加简洁,更加易读,同时也可以避免空指针异常的出现。如果你还没有使用Optional类,那么我建议你尝试一下。