2008-09-08 19 views
17

मैं के साथ एक HashMap तो जैसे MultiMap विशेषता Mixin कोशिश कर रहा हूँ में: MultiMap विशेषता के लिए परिभाषामल्टीमैप स्काला

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

है:

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

मतलब है कि प्रकार A के MultiMap & BMap प्रकार 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 

ऐसा लगता है कि जेनरिक मुझे फिर से ट्रिपिंग कर रहे हैं।

उत्तर

26

मुझे scala.collection.mutable.Set आयात करना पड़ा। ऐसा लगता है कि संकलक ने सोचा कि HashMap[Integer, Set[TreeNode]] में सेट scala.collection.Set था। मल्टीमैप डीफ़ में सेट scala.collection.mutable.Set है।

12

यह परेशान हो सकता है, स्कैला के संग्रह में ओवरलोडिंग नाम इसकी बड़ी कमजोरियों में से एक है।

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

यह वास्तव में scala.collection._ :-) – fikovnik

+0

सही है आप कर रहे हैं:

क्या इसके लायक है के लिए, यदि आप scala.collection._ आयातित था, तो आप शायद अपने HashMap प्रकार के रूप में लिखा जा सकता था! फिक्स्ड, बहुत धन्यवाद। – Calum