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 ] ]