将nullable java Boolean转换为scala布尔值时出错

时间:2016-02-14 06:08:28

标签: java scala

尝试将可选/可空的java boolean读入scala boolean。

使用以下方法时出错:

val nullableJavaBool: java.lang.Boolean = java.lang.Boolean.TRUE
val x: scala.Boolean = Option(nullableJavaBool).getOrElse(java.lang.Boolean.FALSE)
val y: scala.Boolean = Option(nullableJavaBool).getOrElse(false)
     

[scalac-2.11]   /myworkspace/MyClass.scala:43:   错误:类型不匹配; [scalac-2.11]发现:任何[scalac-2.11]   required:Boolean [scalac-2.11] val x:scala.Boolean =   选项(nullableJavaBool).getOrElse(java.lang.Boolean.FALSE)   [scalac-2.11]
  ^ [scalac-2.11]

     

/myworkspace/MyClass.scala:43:   错误:类型不匹配; [scalac-2.11]发现:任何[scalac-2.11]   required:Boolean [scalac-2.11] val y:scala.Boolean =   选项(nullableJavaBool).getOrElse(假)

请您解释一下这个错误背后的原因以及实现这个目标的更好方法是什么?

1 个答案:

答案 0 :(得分:3)

问题出在scala使用的类型推理器中。问题是类型推理器有时无法推断出类似于选项[T]的高级类型的超类型,尽管它对用户来说是显而易见的。 与使用Option一样,布尔值没有那么多问题,请考虑完整问题解释的答案:

Option getOrElse type mismatch error

要更正您的代码,您必须手动输入一些类型:

val nullableJavaBool: java.lang.Boolean = java.lang.Boolean.TRUE
val x:scala.Boolean = (Option(nullableJavaBool).getOrElse[java.lang.Boolean](java.lang.Boolean.FALSE))

BTW你的转换布尔值的方法没问题,虽然简单if b == null then ... else ...将使用更少的资源