- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
随着 Java-11
的发布,为什么我们有 orElseThrow
和 optionalLong
/OptionalDouble
和其他 Optional Types
当我们可以直接检查数字是否不为空或不等于特定数字时。
此外,我们正在执行空检查,这比抛出异常更好?
可能无法想象 optionalTypes
和 orElseThrow
的实际使用。
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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!