2008-09-08 4 views
17

나는 HashMap 그래서 등으로 MultiMap 특성을 믹스 인하기 위해 노력하고있어에서 Multimap과 다음 MultiMap 특성에 대한스칼라

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

정의입니다 :

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

는 의미 그 종류 AMultiMap & BA & 유형의 Map이거나 그렇게 보입니다. 그러나 컴파일러는 불평합니다 :

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 

제네릭이 나를 다시 트립하고있는 것으로 보입니다.

답변

26

scala.collection.mutable.Set을 가져와야했습니다. 컴파일러는 HashMap[Integer, Set[TreeNode]]의 설정이 scala.collection.Set이라고 생각합니다. MultiMap에서 Set은 scala.collection.mutable.Set입니다.

12

스컬라 컬렉션에서 오버로드되는 이름은 큰 약점 중 하나입니다.

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

그것은 :-) – fikovnik

+0

오른쪽 scala.collection._ 사실입니다 당신이 : 당신이 scala.collection._ 수입이 있다면 그것은 가치가 무엇인지에 대한

는, 당신은 아마로 HashMap 유형을 쓸 수 있었다! 고침, 많은 감사합니다. – Calum