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.

War es hilfreich?

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 ] ]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top