我正在尝试混合 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 ] ]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top