如何在 Guava Optional 中保存空值

Kev*_*vin 5 java guava

我是番石榴图书馆的新手。

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

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

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

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

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

我的方法定义为:

void myMethod(Optional<String> arguments) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

如果我使用

myMethod(Optional.of(null));
Run Code Online (Sandbox Code Playgroud)

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

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

Mec*_*ail 1

我认为这是一个有意的限制。

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

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