我只是写了一堆像这样的转换来处理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))
型
类似地,在另一个方向上的转换只在布尔情况下失败。
1条答案
按热度按时间fv2wmkja1#
我的错。我以为我传递了一个值给一个接受java.lang.Boolean的方法,因为它设置了一个可以为空的数据库字段,而实际上(并且不正确地)它被编码为布尔原语。错误消息使用简单的类名“Boolean”来表示scala.Boolean,即java.lang.boolean,使它们与java.lang.Boolean难以区分,几乎没有减少我的困惑。