MultiMap в Scala - PullRequest
       21

MultiMap в Scala

17 голосов
/ 08 сентября 2008

Я пытаюсь смешать черту 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]]

То есть, что 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  

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

Ответы [ 2 ]

26 голосов
/ 08 сентября 2008

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

12 голосов
/ 15 сентября 2008

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

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

new HashMap[ Integer, mutable.Set[ TreeNode ] ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...