Java 中的 Optional orElse Optional
我一直在Java 8中使用新的Optant类型,并且我遇到了一个似乎在功能上不受支持的常见操作:“orElseOptional”
请考虑以下模式:
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
这种模式有很多种形式,但它归结为在一个可选的上想要一个“orElse”,该可选模式采用一个产生新可选的函数,仅当当前可选不存在时才调用。
它的实现将如下所示:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
我很好奇这种方法是否存在的原因,如果我只是以一种意想不到的方式使用Anfedsable,以及人们想出了什么其他方法来处理这种情况。
我应该说,我认为涉及自定义实用程序类/方法的解决方案并不优雅,因为使用我的代码的人不一定知道它们的存在。
另外,如果有人知道,这样的方法是否会包含在JDK 9中,我可以在哪里提出这样的方法?对我来说,这似乎是API的一个非常明显的遗漏。