我在互联网上发现了一些甚至无法编译的 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 是一个 ReadOnlyDoubleProperty,它扩展了 DoubleExpression 并实现了 ReadOnlyProperty<'java.lang.Number>。
这可能是基本的 Java,但我真的不明白为什么它不能编译,但可以为其他人编译。
最佳答案
根据文件, ReadOnlyDoubleProperty
工具 ObservableValue<Number>
, 它有一个方法 void addListener(ChangeListener<? super Number> listener)
所以你需要传入一个ChangeListener<T>
其中 T
是 Number
的父类(super class)型或 Number
本身。 Double
不是 Number
的父类(super class)型, 所以你不能传入 ChangeListener<Double>
.
关于java - 为什么 ReadOnlyDoubleProperty 不是 Double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855579/