18

我正在尝试将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 MultiMapof types A&B是 a Mapof types 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  

似乎泛型又让我绊倒了。

4

2 回答 2

26

我不得不导入scala.collection.mutable.Set. 似乎编译器认为 Set inHashMap[Integer, Set[TreeNode]]scala.collection.Set. MultiMap def 中的 Set 是.scala.collection.mutable.Set

于 2008-09-08T18:59:25.310 回答
12

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

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

new HashMap[ Integer, mutable.Set[ TreeNode ] ]
于 2008-09-15T16:24:13.377 回答