gpt4 book ai didi

java - 为什么可选的 Long/Double 和 orElseThrow?

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:50 24 4
gpt4 key购买 nike

随着 Java-11 的发布,为什么我们有 orElseThrowoptionalLong/OptionalDouble 和其他 Optional Types 当我们可以直接检查数字是否不为空或不等于特定数字时。

此外,我们正在执行空检查,这比抛出异常更好?

可能无法想象 optionalTypesorElseThrow 的实际使用。

orElseThrow 的 Javadoc .

最佳答案

我从com.google.common.io中随机选择了一个方法演示 Optional<Long> 用法的 API .他们使用自己的 Optional类型,但概念相同。

@Override
public Optional<Long> sizeIfKnown() {
if (file.isFile()) {
return Optional.of(file.length());
} else {
return Optional.absent();
}
}

由于缺少OptionalLong , 它们会自动换行 file.length() ,它返回一个 long , 变成 Optional<Long> .他们不想要 sizeIfKnown抛出异常。他们不想要 sizeIfKnown引入一个神奇的返回值来指示值的缺失。

相反,他们想说“我们返回一个 long,否则什么都不返回”。

使用 Java 11,它看起来会更干净、更简单

@Override
public OptionalLong sizeIfKnown() {
if (file.isFile()) {
return OptionalLong.of(file.length());
} else {
return OptionalLong.empty();
}
}

关于 orElseThrow ,它是 Java 8 中引入的相对较旧的功能,以功能方式控制执行流程。它完全符合您的描述:a null检查和 throw声明。

if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}

关于java - 为什么可选的 Long/Double 和 orElseThrow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57288280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com