2013-07-25 55 views
1

我在互联网上发现了一些javaFX代码甚至没有编译。为什么ReadOnlyDoubleProperty不是Double?

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使用数量,而不是一个双(延伸数)。

WidthProperty是一个ReadOnlyDoubleProperty,它扩展了DoubleExpression并实现了ReadOnlyProperty <'java.lang.Number>。

这可能是基本的Java,但我真的不明白为什么它不编译,但为别人做。

+0

'ReadOnlyDoubleProperty'实现'ObservableValue ',它需要'ChangeListener <?超级数字>',而'Double'不是数字的超级类别。 – assylias

回答

4

根据该文件,ReadOnlyDoubleProperty工具ObservableValue<Number>,其中有一个方法void addListener(ChangeListener<? super Number> listener)

所以你需要在ChangeListener<T>传递,其中T是一个超级类型的NumberNumber本身。 Double不是超级类型的Number,所以你不能通过ChangeListener<Double>

+0

谢谢你的清晰答案。我会尽力找到我发现不可能的一段代码。晚上好! – Fabinout

相关问题