题
我正在尝试混合 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
& B
是一个 Map
类型 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
看来仿制药又让我犯难了。
解决方案
我必须导入 scala.collection.mutable.Set
. 。看来编译器认为 Set in HashMap[Integer, Set[TreeNode]]
曾是 scala.collection.Set
. 。MultiMap def 中的 Set 是 scala.collection.
mutable
.Set
.
其他提示
这可能很烦人,Scala 集合中的名称重载是它的一大弱点。
无论它的价值如何,如果你有的话 scala.collection._
导入,你可能已经写了你的 HashMap
输入为:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]
不隶属于 StackOverflow