📌  相关文章
📜  Java中的 OptionalInt orElseThrow(Supplier) 方法及示例(1)

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

Java中的 OptionalInt orElseThrow(Supplier) 方法及示例

在Java 8中,Optional是一种用于解决null值问题的类型,它可以表示一个值存在或者不存在。Optional提供了一组方法来处理这种情况,例如orElse、orElseGet、orElseThrow等等。其中,orElseThrow方法允许我们在Optional中的值为空时抛出一个异常。此方法还需要一个Supplier参数,用于返回一个异常对象。

OptionalInt

除了用于包装引用类型外,Optional还提供了Int、Long和Double等类型的包装,分别对应基本数据类型int、long和double的情况。OptionalInt是其中之一,用于包装int值类型。

OptionalInt提供了许多与Optional相同的方法,例如isPresent、ifPresent等等。还有两个特殊的方法asInt和orElse。

asInt方法:如果OptionalInt中有值,则返回该值,否则抛出一个NoSuchElementException异常。

orElse方法:如果OptionalInt中有值,则返回该值,否则返回一个默认值,例如orElse(0)。

orElseThrow方法

除了以上已有的方法,OptionalInt还提供了orElseThrow方法,它允许我们在OptionalInt中的值为空时抛出一个异常。此方法还需要一个Supplier参数,用于返回一个异常对象。

public <X extends Throwable> int orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
    if (isPresent()) {
        return value;
    } else {
        throw exceptionSupplier.get();
    }
}
示例

假设我们有一个方法,用于返回一个int类型值,但是这个值有可能不存在,在Java 8之前,我们可能会返回一个-1作为空值的标记。但是在Java 8中,我们可以使用OptionalInt来解决这个问题:

public OptionalInt getNumber() {
    // some code to calculate the number
    if (numberExists) {
        return OptionalInt.of(number);
    } else {
        return OptionalInt.empty();
    }
}

然后,在调用getNumber方法时,我们可以使用orElseThrow方法来处理空值的情况:

int number = getNumber().orElseThrow(() -> new NoSuchElementException("Number does not exist"));

如果getNumber方法返回了一个空的OptionalInt对象,将会抛出一个NoSuchElementException异常,并且异常信息为“Number does not exist”。

注意:orElseThrow方法只在OptionalInt对象为空时才会抛出异常,不为空时将正常返回OptionalInt中的值,在这种情况下,异常Supplier将不会被调用。