java - 使用 Optional.ofNullable 替代三元运算符是一种好习惯吗?

标签 java java-8 option-type nullable

考虑这个表达式的用法:

String hi = Optional.ofNullable(sayHi()).orElse("-");

有效对应于这个三元表达式:

String hi = sayHi() != null ? sayHi() : "-";

Optional.ofNullable 与方法调用的这种用法是一种好的做法吗?或者只是额外冗长的编码?


我认识到 Optional.ofNullable 实际上创建了一个变量并避免调用 sayHi() 方法两次。为了避免这个问题,您实际上可以创建一个额外的变量,但这会增加三元选项的冗长程度:

String hi = sayHi();
hi = hi != null ? hi : "-";

另一方面,Optional.ofNullablehi 不是 null 的情况下创建一个额外的 Optional 对象.所以肯定会有更多的开销。

因此,使用这种类型的构造函数来替代三元构造函数似乎有利有弊。


顺便说一句:这是 Optional.ofNullable 的 Java 8 实现:

public static <T> Optional<T> ofNullable(T value) {
    return value == null ? empty() : of(value);
}

最佳答案

在 JDK 9 或更高版本中,使用这个:

String hi = Objects.requireNonNullElse(sayHi(), "-");

这避免了在使用三元运算符时必须重复 sayHi(),或者将其值分配给在三元中重用的局部变量。这可能是一个小的改进。它还回避了是否使用 Optional 的问题。 :-)

关于java - 使用 Optional.ofNullable 替代三元运算符是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53504573/

相关文章:

java - 如何更改 Java 中 Date 对象的时区偏移量?

java - 将固定值添加到 bigdecimal 列表中

java - Mockito.when().thenReturn() 不起作用或返回 null

java - 获取 Facebook 用户公共(public)数据,无需通过 Facebook Graph API 登录即可获取这些数据(如果存在)

java - 使用 Java 8 过滤流后收集

java - 将 Java-8 Stream 收集到 Guava ImmutableList 的最佳方式

swift - 如何通过可选的字典修改值类型的值?

java - 使用可选项重写服务请求

java - 使用 Guava 函数将 List<List<String>> 转换为 List<Integer>

java-8 - 从 ResultSet 获取日期以用于 java.time 类