over 的优点是,如果源是基元值,则可以避免装箱操作。OptionalInt
Optional<Integer>
int
如果源已经是 .在这种情况下,如果下一个操作需要 ,则始终会发生取消装箱操作,无论是在构造时还是在将下一个操作与 .因此,使用a没有任何优势。Integer
int
OptionalInt
Optional<Integer>
OptionalInt
请记住,这些类的目的不是用作参数类型,因此不应有代码期望 as 输入。引用Brian Goetz最近的一句话:OptionalInt
我们的目的是为库方法返回类型提供一种有限的机制,其中需要有一种清晰的方式来表示“无结果”,并且用于此类方法极有可能导致错误。null
(由我强调)
顺便说一句,您可以使用以下通常的操作将 a 转换为不带条件运算符的 :Optional<Integer>
OptionalInt
Optional
Integer boxed=null;
OptionalInt optInt=Optional.ofNullable(boxed)
.map(OptionalInt::of).orElseGet(OptionalInt::empty);
从 Java 9 开始,您还可以使用
OptionalInt optInt=Stream.ofNullable(boxed).mapToInt(Integer::intValue).findAny();
但是,如前所述,这不应该是必要的,因为通常您只需指定后续操作,该操作将消耗或,如果存在。这适用于和 .int
Integer
Optional
OptionalInt