2011-09-28 15 views
5

मेरे पास जावा ऑब्जेक्ट OldFashioned है जो जावा 1.4 List:अवांछित जावा सूची में ऑब्जेक्ट कैसे जोड़ें?

[Java] 
class OldFashioned extends List { ... } 

बढ़ाता है, OldFashioned किसी भी प्रकार के पैरामीटर नहीं लेता है। मुझे इसमें SomeObject जोड़ना होगा। जावा में कोई समस्या नहीं है, क्योंकि यह List 1.4 List<Object> 1.5 के रूप में व्यवहार करता है और संग्रह में Object के किसी उप-वर्ग को जोड़ने की अनुमति देता है। लेकिन स्कैला नहीं करता है। तो अगला कोड काम नहीं करता है:

[Scala] 
val oldFashioned = new OldFashioned() 
oldFashioned.add(new SomeObject)  // found: SomeObject; required: E 

यह है, स्कैला कंपाइलर को OldFashioned पर प्रकार पैरामीटर पास करने की आवश्यकता है जो वास्तव में उन्हें नहीं लेता है:

[Scala] 
var oldFashioned: OldFashioned[SomeObject] = null // OldFashioned does not take type parameters 

मैं इसे कैसे दूर कर सकता हूं और SomeObjectOldFashined में जोड़ें?

उत्तर

8

ठीक है, मैं अपने earlier question एक उपयोग यहाँ पाता है (तुम्हें जाना चाहिए वोट दें agilesteel के answer)

def add(oldFashioned: OldFashioned, any: Any): Boolean = oldFashioned match { 
    case l: java.util.List[a] => l.add(any.asInstanceOf[a]) 
} 

val oldFashioned = new OldFashioned 
// oldFashioned: OldFashioned = [] 

add(oldFashioned, "test") 
// res0: Boolean = true 
add(oldFashioned, 1) 
// res1: Boolean = true 
add(oldFashioned, new Object) 
// res2: Boolean = true 

oldFashioned 
// res3: OldFashioned = [test, 1, [email protected]] 

संपादित में से एक विश्वास नहीं कर सकता

oldFashioned.asInstanceOf[java.util.List[SomeObject]].add(new SomeObject) 
+0

मजेदार, आईडीईए एक त्रुटि के रूप में '[ए] 'को हाइलाइट करता है, लेकिन स्कैला कंपाइलर शिकायत नहीं करता है, इसलिए यह काम करता है। आपके और agilesteel दोनों उत्तरों के लिए उपवास। धन्यवाद! – ffriend

+0

मैंने पहले ही आश्चर्यचकित होना शुरू कर दिया है, मेरे पुराने उत्तरों में से एक अचानक अचानक कुछ अपवॉट क्यों प्राप्त कर रहा था;) धन्यवाद आप पर वापस! – agilesteel

संबंधित मुद्दे