📅  最后修改于: 2023-12-03 14:42:50.950000             🧑  作者: Mango
在Java 8中,引入了Optional类来解决null引用的问题。Optional类是一个容器,它可能包含非null值,也可能为空。OptionalLong是Optional类的一个子类,它专门用于处理long类型的值。
OptionalLong类中的orElseThrow()方法允许我们快速获取OptionalLong实例中包含的long类型值。如果OptionalLong实例为空,将抛出一个自定义异常。
public long orElseThrow()
无
orElseThrow()
方法返回OptionalLong实例中包含的long类型值
如果OptionalLong实例为空,将抛出NoSuchElementException
异常。我们可以使用orElseThrow(Supplier<X> exceptionSupplier)
方法指定自定义异常:
public <X extends Throwable> long orElseThrow(Supplier <? extends X > exceptionSupplier) throws X
OptionalLong optionalLong = OptionalLong.of(100L);
// 获取包含的long类型值
long value1 = optionalLong.orElseThrow(); // 100
OptionalLong emptyOptionalLong = OptionalLong.empty();
// 抛出NoSuchElementException异常
long value2 = emptyOptionalLong.orElseThrow();
在上面的示例中,我们首先使用OptionalLong.of()
方法创建一个包含long类型值的OptionalLong实例。然后,我们使用orElseThrow()
方法获取包含的long类型值。由于OptionalLong实例中包含一个long类型值,因此我们直接获取并存储在变量value1
中。
接下来,我们创建一个空的OptionalLong实例。由于该实例中不包含任何值,因此尝试获取包含的值将抛出NoSuchElementException异常。我们在emptyOptionalLong
上调用orElseThrow()
方法获取包含的值。在这种情况下,由于我们未指定自定义异常,因此抛出NoSuchElementException异常。
现在,让我们使用自定义异常实现相同的示例:
OptionalLong emptyOptionalLong = OptionalLong.empty();
// 抛出自定义异常
long value3 = emptyOptionalLong.orElseThrow(() -> new RuntimeException("Value not present"));
在这种情况下,我们在emptyOptionalLong
上调用orElseThrow(Supplier<X> exceptionSupplier)
方法,并在lambda表达式中指定要抛出的自定义异常。
OptionalLong.orElseThrow()
方法是在读取OptionalLong实例中的long类型值时使用的便捷方法。如果OptionalLong实例为空,将抛出NoSuchElementException异常。我们还可以使用orElseThrow(Supplier<X> exceptionSupplier)
方法指定自定义异常。此方法的常见用法包括在需要确保操作不返回空值时使用。