1

インターネット上で、コンパイルすらできない javaFX のコードを見つけました。

tableView.widthProperty().addListener(new ChangeListener< Double >(){
    @Override
    public void changed(final ObservableValue<? extends Double> observableValue, final Double aDouble, final Double aDouble2) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
});

IntelliJ によって表示されるエラーは次のとおりです。

メソッド 'addListener(javafx.beans.value.ChangeListener<'java.lang.Double>)' を解決できません

一方、これはコンパイルしてうまく機能します。

    tableView.widthProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(final ObservableValue<? extends Number> observableValue, final Number number, final Number number2) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
    });

ご覧のとおり、ここでの唯一の違いは、新しい ChangeListener が (Number を拡張した) Double ではなく Number を使用することです。

WidthProperty は、DoubleExpression を拡張し、ReadOnlyProperty<'java.lang.Number> を実装する ReadOnlyDoubleProperty です。

これは基本的なJavaかもしれませんが、なぜそれがコンパイルされないのか、私には本当に分かりません。

4

1 に答える 1

4

ドキュメントによると、メソッドを持つReadOnlyDoublePropertyimplementsObservableValue<Number>void addListener(ChangeListener<? super Number> listener)

そのため、 or自体のスーパー タイプであるChangeListener<T>whereを渡す必要があります。は のスーパー タイプではないため、 を渡すことはできません。TNumberNumberDoubleNumberChangeListener<Double>

于 2013-07-25T10:46:21.930 に答える