我是番石榴图书馆的新手。
我试图在我的方法参数中使用 Optional 。我发现的一个问题是我不可能将空值传递给 Optional。
我认为引入Optional的目的是为了区分
例如,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 ?
我认为这是一个有意的限制。
Optional是Maybe monad的实现。这是为了以类型安全的方式替换空值,保证如果选项值存在,当您NullPointerException尝试使用它时不会得到 a 。允许您插入null会破坏这种类型安全保证。
如果您确实需要区分两种“无数据”值,请考虑使用Optional<Optional<String>>(将内部可能为空的数据包装在Option<String>by using中Optional.fromNullable)。