Question

J'essaie de mélanger le MultiMap trait avec un HashMap ainsi:

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

La définition du MultiMap la caractéristique est :

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

Ce qui veut dire qu'un MultiMap de types A & B est un Map de types A & Set[B], du moins c'est ce qu'il me semble.Cependant, le compilateur se plaint :

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  

Il semble que les génériques me font encore trébucher.

Était-ce utile?

La solution

J'ai dû importer scala.collection.mutable.Set.Il semble que le compilateur ait pensé que Set in HashMap[Integer, Set[TreeNode]] était scala.collection.Set.L'ensemble dans la définition MultiMap est scala.collection.mutable.Set.

Autres conseils

Cela peut être ennuyeux, la surcharge de noms dans les collections de Scala est l'une de ses grosses faiblesses.

Pour ce que ça vaut, si tu l'avais scala.collection._ importé, vous auriez probablement pu écrire votre HashMap tapez comme :

new HashMap[ Integer, mutable.Set[ TreeNode ] ]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top