【发布时间】:2013-07-25 10:33:31
【问题描述】:
我在互联网上找到了一些 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)'
另一方面,它可以编译并且效果很好。
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 是一个 ReadOnlyDoubleProperty,它扩展了 DoubleExpression 并实现了 ReadOnlyProperty。
这可能是基本的Java,但我真的不明白为什么它不能编译,但对其他人却可以。
【问题讨论】:
-
ReadOnlyDoubleProperty实现了ObservableValue<Number>,它需要一个ChangeListener<? super Number>,而Double不是Number的超类。