【问题标题】:MultiMap in ScalaScala中的MultiMap
【发布时间】:2023-03-31 04:10:01
【问题描述】:

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

这意味着AB 类型的MultiMapMap 类型的ASet[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  

似乎泛型又让我绊倒了。

【问题讨论】:

    标签: generics scala


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这可能很烦人,Scala 集合中的名称重载是它的一大弱点。

      不管怎样,如果您导入了 scala.collection._,您可能会将您的 HashMap 类型写为:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多