generics - type - scala泛型




MultiMap in Scala (2)

我不得不导入scala.collection.mutable.Set 。 看来编译器认为在HashMap[Integer, Set[TreeNode]]scala.collection.Set 。 MultiMap def中的Set是scala.collection. mutable

我试图混合使用HashMapMultiMap特质,如下所示:

val children:MultiMap[Integer, TreeNode] = 
    new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]

MultiMap特征的定义是:

trait MultiMap[A, B] extends Map[A, Set[B]]

这意味着一个类型ABMultiMap是一个ASet[B]类型的Map ,或者在我看来。 但是,编译器抱怨:

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  

仿制药似乎又把我绊倒了。


这可能是令人讨厌的,在Scala的集合中重载的名字是其最大的弱点之一。

对于它的价值,如果你有scala.collection._导入,你可能已经写了你的HashMap类型为:

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




scala