java - 为什么 ReadOnlyDoubleProperty 不是 Double?

标签 java double javafx

我在互联网上发现了一些甚至无法编译的 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>其中 TNumber 的父类(super class)型或 Number本身。 Double不是 Number 的父类(super class)型, 所以你不能传入 ChangeListener<Double> .

关于java - 为什么 ReadOnlyDoubleProperty 不是 Double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855579/

相关文章:

java - 从 ReactJS 访问 REST 服务时出现 CORS 问题

多种对象类型的 JavaFX TreeView? (和更多)

java - 如何从不同的类调用比较两个值的方法?

arrays - 当我成功对三个数组之一进行排序后,如何对其他数组进行排序

Javafx 8 对话框额外边框

google-analytics - 基于 JavaFX 小程序的网站的广告

java - 如何使用 Hibernate 尽可能快地插入数据

java - 如何查看 double 是否包含给定的整数?

java - 数学方程中的 Nan

java - JavaFX 桌面应用程序与远程服务器通信的最佳实践