Pregunta
Estoy tratando de mezclar el MultiMap
rasgo con un HashMap
al igual que:
val children:MultiMap[Integer, TreeNode] =
new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]
La definición para el MultiMap
rasgo es:
trait MultiMap[A, B] extends Map[A, Set[B]]
Lo que significa que un MultiMap
de tipos A
& B
es un Map
de tipos A
& Set[B]
, o eso me parece a mí.Sin embargo, el compilador se queja:
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 los genéricos me están volviendo a hacer tropezar.
Solución
tuve que importar scala.collection.mutable.Set
.Parece que el compilador pensó que el Set in HashMap[Integer, Set[TreeNode]]
era scala.collection.Set
.El conjunto en la definición de MultiMap es scala.collection.
mutable
.Set
.
Otros consejos
Eso puede resultar molesto, la sobrecarga de nombres en las colecciones de Scala es una de sus grandes debilidades.
Por lo que vale, si tuvieras scala.collection._
importado, probablemente podrías haber escrito tu HashMap
escriba como:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]