java - 将包含 boolean 值的 Scala 映射转换为包含 java.lang.Boolean 的 Java 映射

标签 java scala interop

我想将具有 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/

相关文章:

scala - 如何表达[42 | x == y] 与理解?

java - 没有maven的eclipse中java + scala + lift项目的环境

java - Optaplanner - 创建 jar 文件时出现 NullPointerException

scala - 将模拟 Actor 注入(inject) Spray 路线进行测试

scala - 在SBT中进行交叉构建时设置唯一的快照版本

c# - 添加属性后如何为 .NET 程序集保留 COM 二进制兼容性?

java - 使用 HTML5 多文件输入将多张图像上传到 GAE Blobstore

java - 如何解释 Java 8 和 Java 7 中 HashMap 的插入性能

c# - 将消息从一个 C# 控制台应用程序发送到另一个

arrays - 为什么与 'def' 绑定(bind)的 int 数组在 Clojure 中接受 Long 值?