Scala中的MultiMap
Posted
技术标签:
【中文标题】Scala中的MultiMap【英文标题】:MultiMap in Scala 【发布时间】:2008-09-08 18:32:58 【问题描述】:我正在尝试将 MultiMap
特征与 HashMap
混合,如下所示:
val children:MultiMap[Integer, TreeNode] =
new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]
MultiMap
特征的定义是:
trait MultiMap[A, B] extends Map[A, Set[B]]
这意味着A
和B
类型的MultiMap
是Map
类型的A
和Set[B]
,或者在我看来是这样。但是,编译器抱怨:
C:\...\TestTreeDataModel.scala:87: error: illegal inheritance; template $anon inherits different type instances of trait Map: scala.collection.mutable.Map[Integer,scala.collection.mutable.Set[package.TreeNode]] and scala.collection.mutable.Map[Integer,Set[package.TreeNode]]
new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]
^ one error found
似乎泛型又让我绊倒了。
【问题讨论】:
【参考方案1】:我必须导入scala.collection.mutable.Set
。似乎编译器认为 HashMap[Integer, Set[TreeNode]]
中的 Set 是 scala.collection.Set
。 MultiMap def 中的 Set 是scala.collection.
mutable
.Set
。
【讨论】:
【参考方案2】:这可能很烦人,Scala 集合中的名称重载是它的一大弱点。
不管怎样,如果您导入了 scala.collection._
,您可能会将您的 HashMap
类型写为:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]
【讨论】:
以上是关于Scala中的MultiMap的主要内容,如果未能解决你的问题,请参考以下文章