किम जैसा कि पहले ही कहा, तुम क्योंकि स्काला के अरास जावा के/सी # की तरह covariant नहीं कर रहे हैं, उसके तत्व प्रकार में अपने सरणी covariant बनाने की जरूरत है।
इस कोड को यह उदाहरण के लिए काम कर देगा:
class Table[+T](rowData: Array[Array[T]],columnNames: Seq[_])
यह सिर्फ संकलक कि T
covariant किया जाना चाहिए बताता है (इस के समान है जावा के ? extends T
या सी # के out T
)।
आपको अधिक नियंत्रण के बारे में प्रकार की अनुमति नहीं है और जो कर रहे हैं की जरूरत है, तो आप भी उपयोग कर सकते हैं:
class Table[T <: Any](rowData: Array[Array[T]],columnNames: Seq[_])
इस संकलक कि T
(Any
के किसी भी उप-प्रकार जो Any
से बदला जा सकता है हो सकता है बता देंगे आपके उदाहरण में CharSequence
जैसी कक्षा के लिए)।
दोनों मामलों
इस परिदृश्य में एक ही काम करते हैं:
scala> val people = Array(Array("John", "25"), Array("Mary", "22"))
people: Array[Array[java.lang.String]] = Array(Array(John, 25), Array(Mary, 22))
scala> val headers = Seq("Name", "Age")
headers: Seq[java.lang.String] = List(Name, Age)
scala> val myTable = new Table(people, headers)
myTable: Table[java.lang.String] = [email protected]
संपादित करें:
val people: Array[Array[Any]] = Array(Array("John", "25"), Array("Mary", "22"))
: तो सवाल में वर्ग अपने नियंत्रण में नहीं है, आप किस प्रकार इस तरह स्पष्ट रूप से चाहते हैं की घोषणा
अद्यतन
इस सवाल में स्रोत कोड है:
// TODO: use IndexedSeq[_ <: IndexedSeq[Any]], see ticket [#2005][1]
def this(rowData: Array[Array[Any]], columnNames: Seq[_]) = {
मुझे आश्चर्य है कि अगर किसी को वैकल्पिक हल निकालने के लिए भूल गया, # मई 2005 2011 के बाद से तय हो गई है, क्योंकि ...
मुझे लगता है कि यह है कि टेबल संभालने मेरी कक्षा है। मुझे जिस तालिका की आवश्यकता है वह scala.swing.Table है। इसके अलावा, asInstanceOf मदद करने के लिए प्रतीत नहीं होता है। –
धन्यवाद, स्पष्ट टाइपिंग काम करता है। (मैंने सोचा कि मैं पहले की कोशिश की थी, लेकिन मैं मैं पुराने वस्तु कोड उपयोग कर रहा था लगता है।) मैं देख रहा हूँ मैं पंक्तियों और स्तंभों उलट है - ठीक है, कि आसान है - और मेरी हेडर दिखाई नहीं देती हैं।हालांकि, मैं जो कर रहा हूं उसके लिए महत्वपूर्ण नहीं है। –