2012-11-12 12 views
6
में

मैं एक स्काला वर्ग औजार (wraps) एक java.util.List, यानी कि लिख रहा हूँ:प्रतिनिधि java.util.List # toArray (टी [] क) स्काला

class MyList(backingList: java.util.List) extends java.util.List 

उत्तरार्द्ध है इस तरह एक जावा हस्ताक्षर के साथ एक विधि toArray:

<T> T[] toArray(T[] a) 

भोलेपन से, मैं के रूप में यह लिखा:

def toArray[T](a: Array[T]) = backingList toArray a 

लेकिन संकलक शिकायत Backi पर toArray करने के लिए कि कॉल ngList Array[? with java.lang.Object] की अपेक्षा करता है।

मुझे लगता है कि मैंने Array[_ >: T with Object] (जो संकलक कृपया सुझाव देता है) पर हर संभावित विविधता की कोशिश की है, लेकिन कोई भाग्य नहीं है। कोई सुझाव?

+1

नहीं आपके प्रश्न का उत्तर है, लेकिन क्या आप जानते हैं इस तरह के रैपर पहले से ही 'JavaConversions' /' JavaConverters' में मौजूद हैं? +1 बीटीडब्ल्यू। –

+1

मुझे पता है, लेकिन यह जावाएफएक्स के 'ऑब्जर्जेबल लिस्ट' के संदर्भ में है (जो java.util.List को बढ़ाता है)। –

उत्तर

3

यह भी काम करता है:

def toArray[T](a: Array[T with Object]) = backingList.toArray[T](a) 
+0

वास्तव में यह करता है। 'बैकिंगलिस्ट टू एर्रे [टी] (ए)' (यानी डॉट के बिना) हालांकि काम नहीं करता है, लेकिन शायद यह एक स्कैला सिंटैक्स चीज है। –

2

Array[_ >: T with Object]Array[X forSome {type X <: Object}] के लिए वाक्यात्मक चीनी, ऑब्जेक्ट की श्रृंखला जिसका प्रकार वस्तु की एक उप-प्रकार है, जिसका अर्थ है, लेकिन क्या आप की जरूरत एक ही प्रकार के एक्स, जो वस्तु की एक उप-प्रकार है की वस्तुओं का एक सरणी है। तो संक्षेप में, यह सिर्फ एक scoping मुद्दा है।

def toarray(a: Array[X] forSome {type X <: Object}) = backingList toArray a 
+0

मुझे नहीं लगता कि यह 'List.toArray' विधि को ओवरराइड करता है। –

+0

मुझे नहीं लगता कि यह माना जाता है, कम से कम सवाल यह नहीं कहता है। सवाल फिर से पढ़ना, इसका अर्थ इस तरह से व्याख्या किया जा सकता है। : डी –

+0

हां, यह 'List.toArray' को लागू करना है। –