当前位置:  开发笔记 > 编程语言 > 正文

为什么IntegerProperty实现Property <Number>而不是Property <Integer>?

如何解决《为什么IntegerProperty实现Property<Number>而不是Property<Integer>?》经验,为你挑选了1个好方法。

PropertyJavaFX添加的接口有一个类型参数T,它是属性包装的值的类型.

其中的实现Property接口,还有一些用于数字:IntegerProperty,FloatProperty,等所有这些类实现Property.

我们IntegerProperty举个例子.它实施的原因是什么,Property而不是Property我所期望的?


这是一个UML图,阐明了以下层次结构IntegerProperty:

在此输入图像描述



1> Modus Tollen..:

正如Java错误报告的注释部分所述(DoubleProperty具有意外的泛型类型),

这个设计是有意的.它使所需方法的数量显着减少.


在这个答案的评论中,James_D让我意识到后来的错误报告解决了这个问题,ChangeListener无法添加到SimpleIntegerProperty中.评论

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

表明团队考虑改变设计,但为时已晚.


我不得不同意Randahl Isaksen的评论:"不过,对我而言,这似乎是对泛型的不当使用.习惯于泛型的Java开发人员会期望使用泛型的FruitCrate是Crate 而不是Crate .使用泛型的整个目的是确保编译时类型的安全性和更少的转换.使用这种设计,你不能完全保证在编译时正确使用类型,你仍然需要转换.我知道这个设计可以在内部简化您的API,但在外部,这会降低JavaFX API的质量."
在JavaFX开发团队稍后的评论中(参见例如http://mail.openjdk.java.net/pipermail/openjfx-dev/2014-February/012739.html),您开始看到对"我们试图修复此问题"的引用但是为时已晚,"这对我来说,虽然它可能是有意的,但这是一个错误.还有其他解决方案不涉及组合爆炸API,例如`public abstract class NumberProperty implements Property `和`public class IntegerProperty extends NumerProperty `,正如数字所暗示的那样人
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有