Scala中的MultiMap

18

我正在尝试将 MultiMap trait 与 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&BMultiMap是类型为A&Set[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  

似乎泛型再次困扰了我。

2个回答

26

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


12

Scala集合中的名称重载是其主要弱点之一,这可能会让人感到烦恼。

值得一提的是,如果您导入了scala.collection._,您可能可以将HashMap类型编写为:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接