Scala中的MultiMap

时间:2008-09-08 18:32:59

标签: generics scala

我正在尝试将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]]

意味着MultiMap类型A& BMap类型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  

仿制药似乎再次绊倒我。

2 个答案:

答案 0 :(得分:26)

我必须导入scala.collection.mutable.Set。似乎编译器认为HashMap[Integer, Set[TreeNode]]中的Set是scala.collection.Set。 MultiMap def中的Set为scala.collection. mutable .Set

答案 1 :(得分:12)

这可能很烦人,Scala集合中的名称重载是它的一大弱点。

对于它的价值,如果您导入scala.collection._,则可能已将HashMap类型写为:

new HashMap[ Integer, mutable.Set[ TreeNode ] ]