【问题标题】:How to use Guava Optional in this scenario在这种情况下如何使用 Guava Optional
【发布时间】:2014-04-13 23:22:42
【问题描述】:

我有一个场景想使用 Guava Optional,但是有问题:

方法是这样的:

private static void method(Optional<Object> myOptional) {
   if(myOptional.isPresent()) {
       ....
   }
}

myOptional 可以包含非空值、空值或缺席()。在这种情况下,null 是有效的输入。

在方法中,我想用不同的方式处理非空值和空值,但忽略不存在的值。

但是,如果我在这里使用 isPresent,那么 null 值也会被忽略。但是如果我使用“get”方法,缺失的值会抛出异常。如果我使用 orNull,那么缺失的值也会返回为 null。

我不确定我会在这里做什么。但我认为创建 Optional 的原因是为了区分 null 和缺席,以便 null 成为一个有效的有意义的值。但看起来 Optional 中没有任何方法可以让我实现我的用例。

有人可以帮忙吗?谢谢。

【问题讨论】:

  • 我建议使用Optional作为方法的参数类型。最好作为 return 类型。如果您将其用作参数,则有更好的选择……例如,您的方法有两个重载,method()method(Object)

标签: java guava optional


【解决方案1】:

你不能这样做。

javadoc 明确指出:Optional 可能包含 非空引用。从来没有null 一个。

您可以创建一个Optional.fromNullable(whatever).orNull()。但是Optional 永远不会区分空值和缺席,因为这不是它的本意!

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2015-11-30
    • 2017-05-16
    • 2012-10-06
    • 2011-05-18
    • 2019-11-29
    • 2022-01-23
    • 2018-05-20
    • 2013-02-25
    相关资源
    最近更新 更多