Generics Scala中的多重映射
我试图将Generics Scala中的多重映射,generics,scala,Generics,Scala,我试图将MultiMap特性与HashMap混合,如下所示: val children:MultiMap[Integer, TreeNode] = new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode] 多重映射特性的定义是: trait MultiMap[A, B] extends Map[A, Set[B]] 这意味着a和B类型的MultiMap是a和集[B]类型的映射,或者在我看来是这样的。但是
MultiMap
特性与HashMap
混合,如下所示:
val children:MultiMap[Integer, TreeNode] =
new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]
多重映射特性的定义是:
trait MultiMap[A, B] extends Map[A, Set[B]]
这意味着a
和B
类型的MultiMap
是a
和集[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
看来泛型又把我绊倒了。我不得不导入scala.collection.mutable.Set
。似乎编译器认为HashMap[Integer,Set[TreeNode]
中的集合是scala.collection.Set
。多重映射定义中的集合是scala.collection.
可变的
.Set
这可能很烦人,Scala集合中的名称重载是它的一大弱点
值得一提的是,如果您导入了scala.collection.\u
imported,您可能已经将HashMap
类型编写为:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]