سؤال
أحاول مزج 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
يبدو أن الأدوية الجنيسة تتعثرني مرة أخرى.
المحلول
اضطررت إلى الاستيراد scala.collection.mutable.Set
.يبدو أن المترجم يعتقد أن Set in HashMap[Integer, Set[TreeNode]]
كان scala.collection.Set
.المجموعة الموجودة في MultiMap def هي scala.collection.
mutable
.Set
.
نصائح أخرى
يمكن أن يكون ذلك مزعجًا، فالحمل الزائد للاسم في مجموعات Scala هو أحد نقاط الضعف الكبيرة فيه.
لما يستحق، إذا كان لديك scala.collection._
المستوردة، ربما كنت قد كتبت الخاص بك HashMap
اكتب كـ:
new HashMap[ Integer, mutable.Set[ TreeNode ] ]
لا تنتمي إلى StackOverflow