【发布时间】:2013-09-04 08:41:56
【问题描述】:
我是 Guava 库的新手。
我正在尝试在我的方法参数中使用 Optional。我发现的一个问题是我不可能将 null 值传递给 Optional。
我觉得引入Optional的目的是为了区分
- 没有价值的东西
- 具有空值的东西
例如,Optional.absent() 表示该值不存在。而 null 是一个存在的值。
根据这个逻辑,我假设 Optional 必须有某种方法允许我们在其中保存一个空值。但是,我找不到这样做的方法。
我的方法定义为:
void myMethod(Optional<String> arguments) {
....
}
如果我使用
myMethod(Optional.of(null));
它会给我运行时错误,说值不能为空。
如何在 Optional 中传递 null?
【问题讨论】:
-
你完全错过了
Optional的观点,请阅读UsingAndAvoidingNullExplained page from Guava Wiki。一般来说,Optional不是为了在方法参数中使用,而是作为结果使用。 -
@Xaerxess 哪里说
Optional不打算在方法参数中使用? -
@milkplusvellocet 1) 在将
Optional引入Java 8 there has been a big discussion about this 时:应该将Optional视为OptionalResult吗? 2) 请阅读甲骨文的Brian Goetz summary on this topic。 3) Guava devs also does not recommend usingOptionalin this way:我们建议您使用 Optional 作为方法的返回类型,但不一定在方法参数中。 -
@Xaerxess 确实,Guava 开发人员并没有积极推荐它——但也许 OP 有充分的理由以这种方式使用它。
-
Optional作为参数没有意义的主要原因是有更好的方法可以使参数成为可选参数:主要是创建根本不接受参数的方法的重载.