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/ –