我想将具有 boolean 值的 scala 映射转换为具有 java.lang.Boolean 值的 java 映射(用于互操作性)。
import scala.collection.JavaConversions._
val a = Map[Int, Boolean]( (1, true), (2, false) )
val b : java.util.Map[Int, java.lang.Boolean] = a
失败:
error: type mismatch;
found : scala.collection.immutable.Map[Int,scala.Boolean]
required: java.util.Map[Int,java.lang.Boolean]
val b : java.util.Map[Int, java.lang.Boolean] = a
JavaConversions 隐式转换适用于相同类型参数化的容器,但不知道 Boolean 和 java.lang.Boolean 之间的转换。
我可以使用 JavaConversions 魔术来进行这种转换,还是有一种简洁的语法可以在不使用该包中的隐式转换的情况下进行转换?
最佳答案
JavaConversions
会将 Scala Map 转换为 java.util.Map
,而 Scala 会将 scala.Boolean
隐式转换为 java.lang.Boolean
,Scala不会执行两次隐式转换来得到你想要的类型。
Boolean
提供用于显式转换的 box
方法。
val b: java.util.Map[Int, java.lang.Boolean] = a.mapValues(Boolean.box)
如果您在代码中经常这样做,您可以为所有 Map[T, Boolean]
定义自己的隐式转换。
import scala.collection.JavaConversions._
implicit def boolMap2Java[T](m: Map[T, Boolean]):
java.util.Map[T, java.lang.Boolean] = m.mapValues(Boolean.box)
val b: java.util.Map[Int, java.lang.Boolean] = a
关于java - 将包含 boolean 值的 Scala 映射转换为包含 java.lang.Boolean 的 Java 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9638492/