ho un errore di compilazione strano. Le righe inutili sono:Array [Niente con java.lang.Object] necessaria a Scala 2.9.1
val comboBoxLanguage = new javax.swing.JComboBox
//...
comboBoxLanguage.setModel(new javax.swing.DefaultComboBoxModel(
Array[Object]("Scala", "Java")))
e l'errore:
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")))
Secondo JavaDoc costruttore di DefaultComboBoxModel
aspetta un Object[]
, che può essere un String[]
o qualsiasi tipo di matrice in Java, poiché gli array sono covariante , ma in Scala non lo sono, quindi dobbiamo usare Array[Object]
, che non dovrebbe essere un problema.
Perché il compilatore aspettano Array[Nothing with java.lang.Object]
? Come posso ripararlo?
Questo sembra essere nuovo con la versione 2.9.1 di Scala. La mia applicazione è stata compilata fino a quando non ho installato 2.9.1 un paio di giorni fa. Una cosa confusa/preoccupante è che non ho cambiato la versione della libreria del compilatore progetto in IntelliJ, ma in qualche modo sembra essere ad usarlo, forse afferrandolo dalla mia variabile d'ambiente SCALA_HOME?
Eccellente, questo lo risolve, grazie. Non so perché IntelliJ stava cercando di utilizzare Java 7 per compilarlo, poiché è impostato su "1.6" nel campo Project SDK. Quindi ho deselezionato "make" nella configurazione di esecuzione e lasciare a sbt di eseguire la compilazione utilizzando la versione di Java corretta (6). –
@LuigiPlinge (compilando con java 7), sembra che si tratti di un problema classico, quando si compila con java 7, si stanno utilizzando le librerie java 7, anche se si è in modalità compatibilita. Se stai usando Maven, puoi dare un'occhiata a http://mojo.codehaus.org/animal-sniffer/ –