为什么IntegerProperty实现Property <number>而不是Property <integer>?

时间:2016-01-08 10:40:57

标签: java generics javafx

JavaFX添加的Content-Type: multipart/form-data; boundary=----webkitformboundary2fvqbgcbynvtvptx 接口有一个类型参数Property,它是属性包装的值的类型。

T界面的实现中,有一些用于数字:PropertyIntegerProperty等。所有这些类都实现了FloatProperty

我们以Property<Number>为例。它实现IntegerProperty而不是Property<Number>的原因是什么原因?

这是一个UML图,阐明了Property<Integer>

的层次结构

enter image description here

2 个答案:

答案 0 :(得分:5)

如Java错误报告(DoubleProperty has unexpected generics type)的评论部分所述,

  

此设计旨在实现。它使所需方法的数量显着减少。

在这个回答的评论中,James_D让我意识到后来发布的错误报告,ChangeListener cannot be added to SimpleIntegerProperty)。评论

  

由于向后兼容性问题,我们决定不更改基本类型属性的泛型(从Number到特定类型)。但是,这意味着无法解决此问题。

表示团队考虑改变设计,但为时已晚。

答案 1 :(得分:0)

我说他们使用的是Number,因此您也可以将这些类与AtomicIntegerBigInteger等一起使用。

据我所知,唯一真实的&#34; DoublePropertyIntegerProperty之间的差异是方法setValue(Number v) - 一个使用v.doubleValue(),另一个v.intValue()

我在这里没有一个正常工作的javafx环境,所以如果使用带有IntegerProperty的{​​{1}}会导致异常,我无法测试。