将可为空的java布尔值转换为scala布尔值时出错
尝试将可选/可为空的java布尔值读入scala布尔值 我在使用以下方法时出错: [scalac-2.11] /myworkspace/MyClass.scala:43: 错误:类型不匹配;[scalac-2.11]发现:任何[scalac-2.11] 必需:布尔[scalac-2.11]值x:scala.Boolean= 选项(nullableJavaBool.getOrElse(java.lang.Boolean.FALSE) [scalac-2.11]将可为空的java布尔值转换为scala布尔值时出错,java,scala,Java,Scala,尝试将可选/可为空的java布尔值读入scala布尔值 我在使用以下方法时出错: [scalac-2.11] /myworkspace/MyClass.scala:43: 错误:类型不匹配;[scalac-2.11]发现:任何[scalac-2.11] 必需:布尔[scalac-2.11]值x:scala.Boolean= 选项(nullableJavaBool.getOrElse(java.lang.Boolean.FALSE) [scalac-2.11] ^[scalac-2.11] /my
^[scalac-2.11] /myworkspace/MyClass.scala:43: 错误:类型不匹配;[scalac-2.11]发现:任何[scalac-2.11] 必需:布尔[scalac-2.11]值y:scala.Boolean= 选项(nullableJavaBool).getOrElse(false)
您能解释一下这个错误背后的原因吗?还有什么更好的方法来实现这个错误呢?问题在于scala使用的类型推断器。问题是,类型推断器有时无法推断出类似选项[T]的更高类型的超类型,尽管用户很清楚它是什么。 与布尔函数一样,它并不像布尔函数那么多的问题,可以考虑这个问题来解释整个问题: 要更正代码,您必须手动输入一些类型:
val nullableJavaBool: java.lang.Boolean = java.lang.Boolean.TRUE
val x:scala.Boolean = (Option(nullableJavaBool).getOrElse[java.lang.Boolean](java.lang.Boolean.FALSE))
顺便说一句,您转换布尔值的方法是可以的,不过如果b==null,那么简单
。。。否则…
将使用更少的资源@statefi,看起来没有什么不同的问题。
val nullableJavaBool: java.lang.Boolean = java.lang.Boolean.TRUE
val x:scala.Boolean = (Option(nullableJavaBool).getOrElse[java.lang.Boolean](java.lang.Boolean.FALSE))