Pergunta

Estou tentando misturar o MultiMap traço com um HashMap igual a:

val children:MultiMap[Integer, TreeNode] = 
    new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]

A definição para o MultiMap característica é:

trait MultiMap[A, B] extends Map[A, Set[B]]

Significando que um MultiMap de tipos A & B é um Map de tipos A & Set[B], Ou é o que me parece.No entanto, o compilador reclama:

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 os genéricos estão me enganando novamente.

Foi útil?

Solução

tive que importar scala.collection.mutable.Set.Parece que o compilador pensou no Set in HashMap[Integer, Set[TreeNode]] era scala.collection.Set.O conjunto na definição MultiMap é scala.collection.mutable.Set.

Outras dicas

Isso pode ser irritante, a sobrecarga de nomes nas coleções do Scala é um dos seus grandes pontos fracos.

Pelo que vale a pena, se você tivesse scala.collection._ importado, você provavelmente poderia ter escrito seu HashMap digite como:

new HashMap[ Integer, mutable.Set[ TreeNode ] ]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top