当条目较少时将 json 转换为 "scala.collection.immutable.HashMap" 时出现 ClassCastException

ClassCastException when converting json to "scala.collection.immutable.HashMap" when entries are less

我使用 json4s 将 json 转换为 scala.collection.immutable.HashMap。但它失败了 java.lang.ClassCastException: scala.collection.immutable.Map$Map3 cannot be cast to scala.collection.immutable.HashMap 当 json 中的条目少于五个时。它与五个或更多条目完美配合。

检查 json 是正确的,这应该不是问题。

implicit val formats = Serialization.formats(NoTypeHints)

read[scala.collection.immutable.HashMap[String, Config]](json).get(id)
case class Config(joinConfig: JoinConfig,
                         a: Option[Boolean],
                         b: Option[Boolean],
                         c: Option[Boolean]) {}

case class JoinConfig(d: Double,e: Double,f: Double) {}

这是 scala 映射行为还是 json4s 问题?

这是 Scala 的行为。 Map.apply(pair: T*) returns Map 的特殊实例基于大小。具有 3 个元素的映射不需要哈希 table,只比较每个键更有效。

正如 Yuriy 在他的评论中所说,您应该只使用 Map 特征并将实现留给 scala。