2011-11-22 11 views
6

में एक अजीब संकलन त्रुटि है। हमलावर पंक्तियां हैं:ऐरे [java.lang.Object के साथ कुछ भी नहीं) स्कैला 2.9.1

val comboBoxLanguage = new javax.swing.JComboBox 
//... 
comboBoxLanguage.setModel(new javax.swing.DefaultComboBoxModel( 
    Array[Object]("Scala", "Java"))) 

और त्रुटि:

error: type mismatch; 
found : Array[java.lang.Object] 
required: Array[Nothing with java.lang.Object] 
Note: java.lang.Object >: Nothing with java.lang.Object, but class Array is invariant in type T. 
You may wish to investigate a wildcard type such as `_ >: Nothing with java.lang.Object`. (SLS 3.2.10) 
comboBoxLanguage.setModel(new javax.swing.DefaultComboBoxModel(Array[Object]("Scala", "Java"))) 

JavaDoc के अनुसार DefaultComboBoxModel के निर्माता एक Object[], जो जावा में एक String[] या जो कुछ भी सरणी प्रकार हो सकता है उम्मीद है, के बाद से सरणियों covariant हैं , लेकिन स्कैला में वे नहीं हैं, इसलिए हमें Array[Object] का उपयोग करना होगा, जो कोई समस्या नहीं होनी चाहिए।

संकलक Array[Nothing with java.lang.Object] की अपेक्षा क्यों कर रहा है? मेरे द्वारा यह कैसे किया जा सकता है?

यह स्कैला के संस्करण 2.9.1 के साथ नया प्रतीत होता है। मेरा आवेदन संकलित करने के लिए प्रयुक्त होता है जब तक कि मैंने दो दिन पहले 2.9.1 इंस्टॉल नहीं किया था। एक भ्रमित/चिंताजनक बात यह है कि मैंने इंटेलिजे में प्रोजेक्ट कंपाइलर लाइब्रेरी संस्करण नहीं बदला है, लेकिन किसी भी तरह से इसका उपयोग किया जा रहा है, शायद इसे मेरे SCALA_HOME पर्यावरण चर से पकड़ रहा है?

उत्तर

7

मुझे लगता है कि यह स्केल 2.9.1 लेकिन नया जेडीके का मुद्दा नहीं है। जेडीके 7 JComboBox सामान्य है और आपके कोड में यह JComboBox[Nothing] है। आपको स्पष्ट रूप से comboBoxLanguage वैरिएबल घोषित करना चाहिए

val comboBoxLanguage = new javax.swing.JComboBox[Object] 
+0

उत्कृष्ट, यह हल करता है, धन्यवाद। मुझे नहीं पता कि IntelliJ इसे संकलित करने के लिए जावा 7 का उपयोग करने का प्रयास क्यों कर रहा था, क्योंकि यह परियोजना एसडीके फ़ील्ड में "1.6" पर सेट है। इसलिए मैंने रन कॉन्फ़िगरेशन में "मेक" चुना है, और सही जावा संस्करण (6) का उपयोग करके संकलन करने के लिए एसबीटी छोड़ दिया है। –

+0

@ लुइगीप्लिंग (जावा 7 के साथ संकलन), ऐसा लगता है कि जावा 7 के साथ संकलन करते समय यह क्लासिक समस्या है, आप जावा 7 पुस्तकालयों का उपयोग कर रहे हैं, भले ही आप संगतता मोड में हों। यदि आप मेवेन का उपयोग कर रहे हैं, तो आप http://mojo.codehaus.org/animal-sniffer/ देख सकते हैं –

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