对于Optional<T>
,有一个or()
方法,这样您可以将其他事物中的选项链接在一起
var o1 = Optional.<String>empty();
var o2 = Optional.of("some string");
Optional<String> o3 = o1.or(() -> o2); // o3 = o2
OptionalInt
无此功能。你会怎么做类似的事情呢?
不使用
var oi1 = OptionalInt.empty();
var oi2 = OptionalInt.empty();
OptionalInt oi3 = oi1.isPresent() ? oi1 : oi2;
正如评论中所说,OptionalInt
类型不允许以任何其他方式执行此操作,而不是您自己建议的方式:
public OptionalInt orElse(OptionalInt o1, OptionalInt o2) {
return o1.isPresent() ? o1 : o2;
}
如果需要,可以更改为与Supplier
一起工作
你最好一开始就使用Optional<Integer>
。
至于为什么,这几乎是不可能回答的。