Java 如何在Guava中保存空值可选
我是番石榴图书馆的新手 我试图在我的方法参数中使用Optional。我发现的一个问题是,我不可能将null值传递给Optional 我认为引入Optional的目的是为了区分Java 如何在Guava中保存空值可选,java,guava,Java,Guava,我是番石榴图书馆的新手 我试图在我的方法参数中使用Optional。我发现的一个问题是,我不可能将null值传递给Optional 我认为引入Optional的目的是为了区分 没有价值的东西 具有空值的东西 例如,Optional.缺席()表示该值不存在。而null是一个存在的值 有了这个逻辑,我假设Optional必须有某种方法允许我们在其中保存空值。然而,我找不到一个方法来做到这一点 我的方法定义为: void myMethod(Optional<String> argument
void myMethod(Optional<String> arguments) {
....
}
它会告诉我运行时错误,表示该值不能为null
如何在可选的内部传递null?请参阅
可能包含对另一个对象的非空引用的不可变对象
对象此类型的每个实例都包含一个非null
引用,或不包含任何内容(在这种情况下,我们称
引用是“缺席”);它从未被称为“包含null
”
[……]
我认为这是有意的限制
可选
是的一个实现。这是为了以一种类型安全的方式替换null,保证如果选项值存在,那么在尝试使用它时不会得到NullPointerException
。允许您插入null
将破坏此类型的安全保证
如果您确实需要区分两种“无数据”值,请考虑使用<代码>可选<代码>(用<代码> >可选的将您的内部可能的空数据封装在<代码>选项> .F/NP> < P> >使用<代码> >可选。可从空(t nulLabeleRead)< /代码>
< P>从谷歌/番石榴RePO中,您应该使用Optional.absent()
@Dušan已经在对另一个答案的评论中写道,但我想这样会更容易被其他人发现你完全没有
可选的
,请阅读。一般来说,Optional
不用于方法参数,而是作为结果使用。@Xaerxess在哪里说Optional
不用于方法参数?@milkplusvellocet 1)在将Optional
引入Java 8时:Optional
应该被视为OptionalResult
?2) 请阅读甲骨文。3) :我们建议您使用Optional作为方法的返回类型,但不一定是在方法参数中。@Xaerxess确实,Guava开发人员并不积极推荐它-也许OP有一个很好的理由以这种方式使用它。Optional
作为参数没有意义的主要原因是有更好的方法使参数可选:主要是,创建一个不带参数的方法重载。它不是完全参数化的,所以我不会说它形成了一个Monad。不允许插入null
实际上会破坏类型安全性(正是因为我们进行了非参数null
检查)。这会创建一个不存在的可选,不是问题中所问的包含空值的可选项。@Dušan包含空值的可选项是什么样子的?简单地说是可选项。fromNullable(null)
与可选项相同。缺席(),不是包含空值的可选项。但是这两者是等价的,所以我不确定你的观点是什么?我的观点是可选的不能包含空值。考虑<代码>可选。FuxNulLable(NULL)。GET()/Cult>将引发异常,它将不会返回null。
Optional.absent()