在Scala 3中,为什么不能使用Option[Boolean]与java.lang.Boolean之间的转换

piok6c0g  于 5个月前  发布在  Scala
关注(0)|答案(1)|浏览(72)

我只是写了一堆像这样的转换来处理java空值的问题。

given Conversion[Option[scala.Boolean], java.lang.Boolean] = opBool =>
    opBool.map(Boolean.box).orNull

given Conversion[Option[scala.Short], java.lang.Short] = opShort =>
    opShort.map(Short.box).orNull

字符串
一般来说,我现在可以用一个Short来编译像这个例子这样的东西:

o.setVault(n.vault)


然而,对于Boolean的情况,编译失败,说明Option[Boolean]不符合Boolean:

o.setDisplayEmail(n.displayEmail)


把同样的转换放在一个函数中编译没有抱怨:

o.setDisplayEmail(conOpSBoolToJBool(n.displayEmail))


类似地,在另一个方向上的转换只在布尔情况下失败。

fv2wmkja

fv2wmkja1#

我的错。我以为我传递了一个值给一个接受java.lang.Boolean的方法,因为它设置了一个可以为空的数据库字段,而实际上(并且不正确地)它被编码为布尔原语。错误消息使用简单的类名“Boolean”来表示scala.Boolean,即java.lang.boolean,使它们与java.lang.Boolean难以区分,几乎没有减少我的困惑。

相关问题