5

我是 Guava 图书馆的新手。

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

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

  1. 没有价值的东西
  2. 具有空值的东西

例如, Optional.absent() 表示该值不存在。而 null 是一个存在的值。

有了这个逻辑,我假设 Optional 必须有某种方法允许我们在其中保存一个空值。但是,我找不到这样做的方法。

我的方法定义为:

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

如果我使用

myMethod(Optional.of(null));

它会给我运行时错误,说该值不能为空。

我怎么可能在 Optional 中传递 null?

4

4 回答 4

1

利用Optional.fromNullable(T nullableReference)

于 2013-08-31T21:20:22.643 回答
1

请参阅JavaDoc

一个不可变对象,可能包含对另一个对象的非空引用。这种类型的每个实例要么包含一个非空引用,要么什么都不包含(在这种情况下,我们说该引用是“不存在的”);从来没有说它“包含null”。

[...]

于 2013-08-31T21:17:37.770 回答
1

我认为这是故意的限制。

OptionalMaybe monad一个实现。这旨在以类型安全的方式替换空值,保证如果选项值存在,NullPointerException当您尝试使用它时不会得到 a。允许您插入null会破坏这种类型安全保证。

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

于 2013-08-31T21:18:15.290 回答
-1

从google/guava repo 的这个 wiki中,你应该使用

Optional.absent()

@Dušan 已经在对另一个答案的评论中写了它,但我想这样会更容易被其他人找到

于 2018-03-14T14:43:19.380 回答