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.

¿Fue útil?

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 ] ]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top