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