Подтвердить что ты не робот

MultiMap в Scala

Я пытаюсь смешивать черту MultiMap с HashMap следующим образом:

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

Определение для признака MultiMap:

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

Считаем, что a MultiMap типов A и B является Map типов A и Set[B], или так мне кажется. Однако компилятор жалуется:

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  

Кажется, что дженерики снова отключили меня.

4b9b3361

Ответ 1

Мне пришлось импортировать scala.collection.mutable.Set. Кажется, компилятор думал, что Set in HashMap[Integer, Set[TreeNode]] был scala.collection.Set. Набор в определении MultiMap равен scala.collection. mutable .Set.

Ответ 2

Это может раздражать, переполнение имени в коллекциях Scala является одной из его больших недостатков.

Для чего стоит, если вы импортировали scala.collection._, вы, вероятно, могли бы написать свой тип HashMap как:

new HashMap[ Integer, mutable.Set[ TreeNode ] ]