Frage
Ich versuche das zu mischen MultiMap
Merkmal mit a HashMap
etwa so:
val children:MultiMap[Integer, TreeNode] =
new HashMap[Integer, Set[TreeNode]] with MultiMap[Integer, TreeNode]
Die Definition für die MultiMap
Merkmal ist:
trait MultiMap[A, B] extends Map[A, Set[B]]
Das bedeutet, dass a MultiMap
von Typen A
& B
ist ein Map
von Typen A
& Set[B]
, zumindest kommt es mir so vor.Der Compiler beschwert sich jedoch:
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
Es scheint, dass Generika mich wieder einmal aus der Fassung bringen.
Lösung
Ich musste importieren scala.collection.mutable.Set
.Es scheint, dass der Compiler das Set in gedacht hat HashMap[Integer, Set[TreeNode]]
War scala.collection.Set
.Das Set in der MultiMap-Definition ist scala.collection.
mutable
.Set
.
Andere Tipps
Das kann nervig sein, denn die Namensüberflutung in Scalas Kollektionen ist eine seiner großen Schwächen.
Für das, was es wert ist, wenn Sie es hätten scala.collection._
importiert, du hättest wahrscheinlich deine schreiben können HashMap
Geben Sie Folgendes ein:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]