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