type parameter classes generics scala

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