📜  Java中的可选 orElseThrow() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:16:31.805000             🧑  作者: Mango

Java中的可选 orElseThrow() 方法及示例

Java 8引入了一个新的Optional类,该类可以更好地表示一个可能为null的值。在这个类中,还有一个非常有用的方法为orElseThrow()。

什么是Optional

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的优点在于它的方法可以链式调用,使代码更加简洁易读。

orElseThrow()

当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类,那么我建议你尝试一下。