1

javafxapiは次のように定義されます。

void addListener(ChangeListener<? super java.lang.Boolean> listener)

次のコード。

new TextArea().focusedProperty.addListener(new ChangeListener[Boolean]() {
  def changed(observable: ObservableValue[_ <: Boolean], oldValue: Boolean, newValue: Boolean) {
  }
})

..このエラーが発生します:

オーバーロードされたメソッド値addListenerと代替:(javafx.beans.value.ChangeListener [_>:java.lang.Boolean])Unit(javafx.beans.InvalidationListener)Unitを(java.lang.Object withjavafx.beans)に適用できません。 value.ChangeListener [ブール値])

java.lang.Booleanの代わりに使用するとBoolean、動作しますが、scalaのブール値では動作しません。何故ですか?完全修飾名を入力せずにこのAPIを使用することは可能ですか?

4

1 に答える 1

7

問題は、Scalaでは、、Boolean <: AnyVal <: Anyjava.lang.Boolean <: AnyRef <: Any<? super java.lang.Boolean>手段java.lang.Booleanまたはそのスーパークラスなので、あなたAnyRefは物事の側に陥らなければなりません。開梱は十分ではありません。にボックス化する場合でも、タイプ階層Booleanの側に配置されます。AnyValjava.lang.Boolean

于 2012-07-07T18:08:23.780 に答える