gpt4 book ai didi

scala - 如何将 java.util.Collections.unmodifiableMap 转换为不可变的 Scala Map?

转载 作者:行者123 更新时间:2023-12-04 11:42:14 27 4
gpt4 key购买 nike

我正在尝试将参数映射从 ServletRequest 转换为 Scala 2.9.0.1 中的 Scala Map:

val params = request.getParameterMap.asInstanceOf[Map[String, Array[String]]]

我已经导入了 collection.JavaConversions._,并在运行时抛出了这个:
java.lang.ClassCastException: java.util.Collections$UnmodifiableMap cannot be cast to scala.collection.immutable.Map

最佳答案

不如直接调用.toMap在上面?

import collection.JavaConversions._
val x = java.util.Collections.unmodifiableMap[Int,Int](new java.util.HashMap[Int,Int]())
val y: Map[Int,Int] = x.toMap //y: Map[Int,Int] = Map()

无需调用 toMap , JavaConversions只允许您隐式转换为可变的 Scala 映射:
scala> val z: collection.mutable.Map[Int,Int] = x
z: scala.collection.mutable.Map[Int,Int] = Map()

大概这是因为 Java Map是可变的,所以它只能在 Scala 中表示为 mutable.Map直到您将其显式转换为 immutable.Map .

请注意,当您只说 Map在 Scala 中,你真的在​​谈论 collection.immutable.Map自从 Predef别名 Map那样:
scala> Map()
res0: scala.collection.immutable.Map[Nothing,Nothing] = Map()

所以当你说 request.getParameterMap.asInstanceOf[Map[String, Array[String]]] ,您确实是在要求 Scala 隐式转换 Java Map进入 Scala 的 collection.immutable.Map , 自 Java 的 Map 以来它不想这样做是可变的。

关于scala - 如何将 java.util.Collections.unmodifiableMap 转换为不可变的 Scala Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046889/

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