我是Guava图书馆的新手。
我试图在我的方法参数中使用Optional。我发现的一个问题是我不能将null值传递给Optional。
我认为引入Optional的目的是区分
例如,Optional.absent()表示该值不存在。 null是存在的值。
有了这个逻辑,我认为Optional必须有一些方法允许我们在其中保存空值。但是,我找不到办法做到这一点。
我的方法定义为:
void myMethod(Optional<String> arguments) {
....
}
如果我使用
myMethod(Optional.of(null));
它会告诉我运行时错误,表示该值不能为空。
如何在Optional?
中传递null答案 0 :(得分:1)
请参阅JavaDoc
不可变对象,可能包含对另一个的非null引用 宾语。此类型的每个实例都包含非null 参考,或什么都不包含(在这种情况下,我们说的是 参考是“缺席”);它永远不会被称为“包含
null
”。[...]
答案 1 :(得分:1)
我认为这是故意限制。
Optional
是the 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已经在另一个答案的评论中写了这篇文章,但我猜这种方式会让其他人更容易找到