Lui*_*hys 6 arrays swing scala intellij-idea scala-2.9
我有一个奇怪的编译错误.违规行是:
val comboBoxLanguage = new javax.swing.JComboBox
//...
comboBoxLanguage.setModel(new javax.swing.DefaultComboBoxModel(
Array[Object]("Scala", "Java")))
Run Code Online (Sandbox Code Playgroud)
和错误:
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")))
Run Code Online (Sandbox Code Playgroud)
根据JavaDoc,构造函数DefaultComboBoxModel需要一个Object[],它可以是String[]Java中的一个或任何数组类型,因为数组是协变的,但在Scala中它们不是,所以我们必须使用Array[Object],这应该不是问题.
为什么编译器期待Array[Nothing with 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]
Run Code Online (Sandbox Code Playgroud)