gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:07 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com