Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

new HashMap[ Integer, mutable.Set[ TreeNode ] ]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top