一尘不染

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

java

考虑一下此表达式的用法:

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对象则创建。因此,肯定会有更多开销。

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


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

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

阅读 2868

收藏
2020-10-09

共1个答案

一尘不染

每当我想到为特定目的使用Optional API时,我总是会提醒自己,它打算做什么以及为什么将其引入JDK中,即

可选的目的是为库方法返回类型提供有限的机制,其中明确需要表示“无结果”,并且为此使用null绝对有可能导致错误-Stuart Marks

可选主要集中于可能具有或不具有返回值的返回类型。

像在您的此特定示例中那样过度使用此构造只会导致额外的内存分配和GC开销。

我会保持简单,而做:

String hi = sayHi();
if(hi == null) hi = “-“;
...
2020-10-09