【发布时间】:2020-01-07 18:23:56
【问题描述】:
我在java中有以下方法
protected <T> T getObjectFromNullableOptional(final Optional<T> opt) {
return Optional.ofNullable(opt).flatMap(innerOptional -> innerOptional).orElse(null);
}
它需要一个 java Optional,它本身可以是 null(我知道,这真的很糟糕,我们最终会解决这个问题)。它用另一个Optional 包裹它,所以它变成Some(Optional<T>) 或None。然后是flatMapped,所以我们返回Optional<T>或者None,最后申请orElse()得到T或者null。
如何在 scala 中使用相同的 java.util.Optional 编写相同的方法?
protected def getObjectFromNullableOptional[T >: Null](opt : Optional[T]): T =
???
我试过了
protected def getObjectFromNullableOptional[T >: Null](opt : Optional[T]): T =
Optional.ofNullable(opt).flatMap(o => o).orElse(null)
但这给了我一个Type mismatch 错误
必需:函数[_ >:可选[T],可选[NotInferedU]]
找到:没有 => 没有
我试过了
protected def getObjectFromNullableOptional[T >: Null](opt : Optional[T]): T =
Option(opt).flatMap(o => o).getOrElse(null)
但这给了我
无法解析重载方法“flatMap”
编辑我没有提到我使用的是 scala 2.11。我相信@tefanobaghino 的解决方案适用于 scala 2.13,但它引导我走向正确的道路。我把我的最终解决方案放在这个解决方案下的 cmets 中
【问题讨论】:
-
IMO 返回
null而不是选项/可选不是一个好主意。输出应该是Option[T]。
标签: java scala optional scala-option