سؤال

أحاول مزج 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 ] ]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top