考虑这个表达式的用法:
String hi = Optional.ofNullable(sayHi()).orElse("-");
有效对应于这个三元表达式:
String hi = sayHi() != null ? sayHi() : "-";
Optional.ofNullable
与方法调用的这种用法是一种好的做法吗?或者只是额外冗长的编码?
我认识到 Optional.ofNullable
实际上创建了一个变量并避免调用 sayHi()
方法两次。为了避免这个问题,您实际上可以创建一个额外的变量,但这会增加三元选项的冗长程度:
String hi = sayHi();
hi = hi != null ? hi : "-";
另一方面,Optional.ofNullable
在 hi
不是 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/