6
我有一個奇怪的編譯錯誤。違規行是:在Scala中需要數組[無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[]
,其可以是在Java String[]
或任何數組類型,因爲數組是協變,但在斯卡拉他們不是,所以我們必須使用Array[Object]
,這應該不成問題。
爲什麼編譯器期望Array[Nothing with java.lang.Object]
?我該如何解決它?
這似乎是Scala 2.9.1版本的新增功能。我的應用程序用於編譯,直到兩天前我安裝了2.9.1。令人困惑/令人擔憂的是,我沒有改變IntelliJ中的項目編譯器庫版本,但它似乎正在使用它,可能是從我的SCALA_HOME環境變量中獲取它?
非常好,解決了它,謝謝。我不知道爲什麼IntelliJ試圖使用Java 7編譯它,因爲它在Project SDK字段中設置爲「1.6」。所以我已經在運行配置中取消了「make」,並且讓sbt使用正確的Java版本(6)進行編譯。 –
@LuigiPlinge(使用java 7編譯),這看起來像是一個經典問題,使用java 7進行編譯時,即使處於兼容模式,也使用java 7庫。如果你使用的是maven,你可以看看http://mojo.codehaus.org/animal-sniffer/ –