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]]

这意味着AB 类型的MultiMapMap 类型的ASet[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的主要内容,如果未能解决你的问题,请参考以下文章

重学scala:scala中的变量方法函数

Scala学习之Scala中的类

Scala中的类继承关系

???像Scala中的函数

Scala中的“评估”

Scala 枚举: Enumeration 概述