私は奇妙なコンパイルエラーがあります。問題の行は、次のとおり配列スカラ2.9.1で[java.lang.ObjectでのNothing]が必要
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
のコンストラクタは、配列が共変であるため、JavaでString[]
または任意の配列型とすることができるObject[]
を期待しますしかし、Scalaではそうではありませんので、私たちはArray[Object]
を使用しなければなりません。これは問題ではありません。
なぜコンパイラはArray[Nothing with java.lang.Object]
を期待していますか?どうすれば修正できますか?
これは、Scala 2.9.1の新機能です。数日前に2.9.1をインストールするまで私のアプリケーションはコンパイルされていました。混乱している/心配なことは、私はIntelliJでプロジェクトコンパイラライブラリのバージョンを変更していないが、何とかそれはおそらく私のSCALA_HOME環境変数からそれをつかんで、それを使用しているようだ?
優秀、それは、ありがとう、それを解決します。 IntelliJがJava 7を使用してコンパイルする理由を知ることはできません。プロジェクトSDKの「1.6」に設定されています。そこで、実行コンフィギュレーションで "make"の選択を解除し、正しいJavaバージョン(6)を使用してコンパイルを実行させます。 –
@ LuigiPlinge(Java 7でコンパイル)、これは古典的な問題のようですが、互換性モードであっても、Java 7でコンパイルすると、Java 7ライブラリを使用しています。 mavenを使用している場合、http://mojo.codehaus.org/animal-sniffer/を見ることができます。 –