Scala中的MultiMap

时间:2020-03-05 18:49:34  来源:igfitidea点击:

我正在尝试将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]]

这意味着A和B类型的MultiMap是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

仿制药似乎又让我失望了。

解决方案

回答

我必须导入scala.collection.mutable.Set。似乎编译器认为" HashMap [Integer,Set [TreeNode]]"中的Set是" scala.collection.Set"。 MultiMap def中的Set是scala.collection.``mutable``.Set

回答

这可能很烦人,Scala系列中的名称超载是其最大的弱点之一。

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

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