Optional.ofNullable(itemKey) 相对于 itemKey == null 有什么优势?

huangapple go评论75阅读模式
英文:

What's the advantage of Optional.ofNullable(itemKey) over itemKey == null

问题

以下是翻译好的部分:

我只是想知道在什么情况下我们需要在 if else 或嵌套的 null 检查中选择使用 Optional。例如,下面两者之间是否有任何优势,或者您认为 Optional 可能过于复杂。

String.valueOf(Optional.ofNullable(itemKey).map(ItemKey::getId).orElse(null));

String.valueOf(itemKey == null ? null : itemKey.getId());

我总是倾向于在需要选择给定对象的嵌套项时使用 Optional.ofOptional.ofNullable,就像下面这样:

private String formatCurrency(String symbol, BigDecimal value) {
    return Optional.ofNullable(value)
            .map(BigDecimal::doubleValue)
            .map(Object::toString)
            .map(val -> symbol + val.replaceAll(REGEX_REMOVE_TRAILING_ZEROS, "$2"))
            .orElse("");
}

我可以知道在代码中什么地方是绝对不需要使用 Optional 的。

英文:

I was just wondering when do we need to choose Optional over if else or nested null check. say for example is there any advantage of one another below or do you think the Optional could be an overkill

String.valueOf(Optional.ofNullable(itemKey).map(ItemKey::getId).orElse(null));

vs

String.valueOf(itemKey == null ? null : itemKey.getId());

I always keen to use the Optional.of or Optional.ofNullable when I had to pick nested item of a given object like below,

private String formatCurrency(String symbol, BigDecimal value) {
    return Optional.ofNullable(value)
            .map(BigDecimal::doubleValue)
            .map(Object::toString)
            .map(val -> symbol + val.replaceAll(REGEX_REMOVE_TRAILING_ZEROS, "$2"))
            .orElse("");
}

Can I please know where in the code the Optional is absolutely unnecessary.

答案1

得分: 0

如果您的代码中已经有了 itemKey,将其转换为 Optional 没有任何意义,这只会使代码变得更复杂。然而,如果您想要使用 Optional,我认为可以这样做:

public Optional<ItemKey> getItemKey() {
    if (...) {
        return Optional.of(new ItemKey());
    }
    return Optional.empty();
}

public void mainCode() {
    String id = getItemKey().map(ItemKey::getId).orElse(null);
}
英文:

If you already have itemKey in your code, there is no meaning of transforming it to an Optional, it just makes the code more complex. However, if you want to use optionals, I think it'd be more appropriate to do something like this:

public Optional&lt;ItemKey&gt; getItemKey() {
    if (...) {
        return Optional.of(new ItemKey());
    }
    return Optional.empty()
}

public void mainCode() {
    String id = getItemKey().map(ItemKey::getId).orElse(null);
}

huangapple
  • 本文由 发表于 2020年4月8日 10:11:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/61092293.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定