gpt4 book ai didi

arrays - Array[Nothing with java.lang.Object] 在 Scala 2.9.1 中需要

转载 作者:行者123 更新时间:2023-12-04 14:49:54 25 4
gpt4 key购买 nike

我有一个奇怪的编译错误。违规行是:

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[] ,可以是 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]

关于arrays - Array[Nothing with java.lang.Object] 在 Scala 2.9.1 中需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8222390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com