将包含布尔的Scala映射转换为包含java.lang.Boolean的Java映射 [英] Conversion of Scala map containing Boolean to Java map containing java.lang.Boolean

查看:97
本文介绍了将包含布尔的Scala映射转换为包含java.lang.Boolean的Java映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将具有布尔值的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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆