Ответ 1
Мне пришлось импортировать scala.collection.mutable.Set
. Кажется, компилятор думал, что Set in HashMap[Integer, Set[TreeNode]]
был scala.collection.Set
. Набор в определении MultiMap равен scala.collection.
mutable
.Set
.
Я пытаюсь смешивать черту 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
. Кажется, компилятор думал, что Set in HashMap[Integer, Set[TreeNode]]
был scala.collection.Set
. Набор в определении MultiMap равен scala.collection.
mutable
.Set
.
Это может раздражать, переполнение имени в коллекциях Scala является одной из его больших недостатков.
Для чего стоит, если вы импортировали scala.collection._
, вы, вероятно, могли бы написать свой тип HashMap
как:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]