2011-11-22 8 views
6

Tengo un error de compilación extraño. Las líneas ofensivas son:Array [Se requiere nada con java.lang.Object] en Scala 2.9.1

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

y el error:

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"))) 

Según JavaDoc el constructor de DefaultComboBoxModel espera un Object[], que puede ser un String[] o cualquier tipo de matriz en Java, ya que las matrices son covariante , pero en Scala no lo son, entonces tenemos que usar Array[Object], lo que no debería ser un problema.

¿Por qué el compilador espera Array[Nothing with java.lang.Object]? ¿Cómo puedo arreglarlo?

Esto parece ser nuevo con la versión 2.9.1 de Scala. Mi aplicación solía compilar hasta que instalé 2.9.1 hace un par de días. Una cosa confusa/preocupante es que no he cambiado la versión de la biblioteca del compilador del proyecto en IntelliJ, pero de alguna manera parece estar usándola, tal vez tomándola de mi variable de entorno SCALA_HOME.

Respuesta

7

Creo que no es un problema de scala 2.9.1 pero nuevo JDK. En JDK7 JComboBox es genérico y en su código es JComboBox[Nothing]. Debe declarar explícitamente comboBoxLanguage variable como

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

Excelente, eso lo resuelve, gracias. No sé por qué IntelliJ intentaba usar Java 7 para compilarlo, ya que está configurado a "1.6" en el campo Project SDK. Así que he des-seleccionado "make" en la configuración de ejecución, y dejo sbt para hacer la compilación usando la versión de Java correcta (6). –

+0

@LuigiPlinge (compilando con java 7), esto parece ser un problema clásico, cuando compila con java 7, está usando las bibliotecas de java 7, incluso si está en modo de compatibilidad. Si está usando maven, puede ver http://mojo.codehaus.org/animal-sniffer/ –

Cuestiones relacionadas