将包含布尔的Scala映射转换为包含java.lang.Boolean的Java映射 [英] Conversion of Scala map containing Boolean to Java map containing java.lang.Boolean
问题描述
我想将具有布尔值的scala映射转换为具有java.lang.Boolean值的Java映射(用于互操作性).
I'd like to convert a scala map with a Boolean value to a java map with a java.lang.Boolean value (for interoperability).
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.
The JavaConversions implicit conversions work happily with containers parameterized on the same types, but don't know about the conversion between Boolean & java.lang.Boolean.
我可以使用JavaConversions魔术来进行此转换,还是在不使用该包中的隐式转换的情况下进行简洁的语法转换?
Can I use the JavaConversions magic to do this conversion, or is there a concise syntax for doing the conversion without using the implicit conversions in that package?
推荐答案
虽然JavaConversions
将Scala Map转换为java.util.Map
,而Scala隐式将scala.Boolean
转换为java.lang.Boolean
,但是Scala不会执行两个隐式转换以获取所需的类型.
While JavaConversions
will convert the Scala Map to a java.util.Map
, and Scala implicitly converts scala.Boolean
to java.lang.Boolean
, Scala won't perform two implicit conversions to get the type you want.
Boolean
为显式提供了box
方法转换.
val b: java.util.Map[Int, java.lang.Boolean] = a.mapValues(Boolean.box)
如果您经常在代码中执行此操作,则可以为所有Map[T, Boolean]
定义自己的隐式转换.
If you're doing this frequently in your code, you can define your own implicit conversion for all 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
这篇关于将包含布尔的Scala映射转换为包含java.lang.Boolean的Java映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!