Pergunta
Estou tentando misturar o MultiMap
traço com um HashMap
igual a:
val children:MultiMap[Integer, TreeNode] =
new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]
A definição para o MultiMap
característica é:
trait MultiMap[A, B] extends Map[A, Set[B]]
Significando que um MultiMap
de tipos A
& B
é um Map
de tipos A
& Set[B]
, Ou é o que me parece.No entanto, o compilador reclama:
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
Parece que os genéricos estão me enganando novamente.
Solução
tive que importar scala.collection.mutable.Set
.Parece que o compilador pensou no Set in HashMap[Integer, Set[TreeNode]]
era scala.collection.Set
.O conjunto na definição MultiMap é scala.collection.
mutable
.Set
.
Outras dicas
Isso pode ser irritante, a sobrecarga de nomes nas coleções do Scala é um dos seus grandes pontos fracos.
Pelo que vale a pena, se você tivesse scala.collection._
importado, você provavelmente poderia ter escrito seu HashMap
digite como:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]