Arrays Scala 2.9.1中需要数组[Nothing with java.lang.Object]

Arrays Scala 2.9.1中需要数组[Nothing with java.lang.Object],arrays,swing,scala,intellij-idea,scala-2.9,Arrays,Swing,Scala,Intellij Idea,Scala 2.9,我有一个奇怪的编译错误。令人不快的是: 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: A

我有一个奇怪的编译错误。令人不快的是:

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,
DefaultComboxModel
的构造函数需要一个
对象[]
,它可以是
字符串[]
或Java中的任何数组类型,因为数组是协变的,但在Scala中不是,所以我们必须使用
数组[Object]
,这应该不是问题

为什么编译器需要
数组[java.lang.Object没有]
?我怎样才能修好它


这似乎是Scala 2.9.1版的新功能。在我几天前安装2.9.1之前,我的应用程序一直在编译。一件令人困惑/担忧的事情是,我没有在IntelliJ中更改项目编译器库版本,但它似乎正在使用它,可能是从我的SCALA_HOME环境变量中获取的?

我认为这不是SCALA 2.9.1的问题,而是新的JDK。在JDK7中,
JComboBox
是通用的,而在您的代码中,它是
JComboBox[Nothing]
。您应该将
comboBoxLanguage
变量显式声明为

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

太好了,这就解决了,谢谢。我不知道IntelliJ为什么尝试使用Java7来编译它,因为它在ProjectSDK字段中设置为“1.6”。因此,我在运行配置中取消了“make”,并让sbt使用正确的Java版本(6)进行编译。@Luigipling(使用Java 7编译),这似乎是一个经典问题,当使用Java 7编译时,您使用的是Java 7库,即使您处于兼容模式。如果您使用的是maven,您可以查看