我一直在使用新的 Java8中的可选类型,我遇到了一个似乎是常见的操作,它在功能上不受支持: “ orElseOptions”
考虑以下模式:
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();
}
我很好奇这种方法不存在的原因,如果我只是无意中使用了可选项,以及人们还想出了什么其他方法来处理这种情况。
我应该说,我认为涉及自定义实用程序类/方法的解决方案并不优雅,因为使用我的代码的人不一定知道它们的存在。
另外,如果有人知道,JDK9中是否包含这样的方法,我可以在哪里提出这样的方法?在我看来,这似乎是 API 的一个明显遗漏。