如何在Guava中保存空值可选

时间:2013-08-31 21:14:04

标签: java guava

我是Guava图书馆的新手。

我试图在我的方法参数中使用Optional。我发现的一个问题是我不能将null值传递给Optional。

我认为引入Optional的目的是区分

  1. 没有价值的东西
  2. 具有空值的东西
  3. 例如,Optional.absent()表示该值不存在。 null是存在的值。

    有了这个逻辑,我认为Optional必须有一些方法允许我们在其中保存空值。但是,我找不到办法做到这一点。

    我的方法定义为:

    void myMethod(Optional<String> arguments) {
        ....
    }
    

    如果我使用

    myMethod(Optional.of(null));
    

    它会告诉我运行时错误,表示该值不能为空。

    如何在Optional?

    中传递null

4 个答案:

答案 0 :(得分:1)

请参阅JavaDoc

  

不可变对象,可能包含对另一个的非null引用   宾语。此类型的每个实例都包含非null   参考,或什么都不包含(在这种情况下,我们说的是   参考是“缺席”);它永远不会被称为“包含null”。

     

[...]

答案 1 :(得分:1)

我认为这是故意限制。

Optionalthe Maybe monad的实现。这是为了以类型安全的方式替换空值,保证如果存在选项值,则在尝试使用它时不会得到NullPointerException。允许您插入null会破坏此类型安全保障。

如果您确实需要区分两种“无数据”值,请考虑使用Optional<Optional<String>>代替(使用Option<String>将内部可能为空的数据包装在Optional.fromNullable中)。

答案 2 :(得分:0)

使用Optional.fromNullable(T nullableReference)

答案 3 :(得分:-1)

来自google / guava repo的this wiki,您应该使用

Optional.absent()
@Dušan已经在另一个答案的评论中写了这篇文章,但我猜这种方式会让其他人更容易找到