У меня странная ошибка компиляции. Оскорбительные строки:
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?