generics - parameter - MultiMap en Scala
scala type (2)
Tuve que importar scala.collection.mutable.Set
. Parece que el compilador pensó que el conjunto en HashMap[Integer, Set[TreeNode]]
era scala.collection.Set
. El conjunto en la definición de MultiMap es scala.collection.
mutable
. .Set
.
Estoy intentando mezclar el rasgo de MultiMap
con un HashMap
como ese:
val children:MultiMap[Integer, TreeNode] =
new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]
La definición del rasgo MultiMap
es:
trait MultiMap[A, B] extends Map[A, Set[B]]
Lo que significa que un MultiMap
de los tipos A
y B
es un Map
de tipos A
y 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 tropezar.
Eso puede ser molesto, la sobrecarga de nombre en las colecciones de Scala es una de sus grandes debilidades.
Por lo que vale, si tuviera scala.collection._
importado, probablemente podría haber escrito su tipo HashMap
como:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]