加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么Number类没有add()或negate()等方法?

发布时间:2020-12-14 05:12:23 所属栏目:Java 来源:网络整理
导读:那么这是一个关于 Java设计的问题. 为什么java.lang.Number类中没有add()和negate()等方法,但是有一些子类呢? 我的意思是…没有统一性.我可以在Float,Long和其他autoboxeable类上使用or操作符,我可以在BigDecimal或BigInteger(它违反SRP)的情况下使用add()
那么这是一个关于 Java设计的问题.

为什么java.lang.Number类中没有add()和negate()等方法,但是有一些子类呢?

我的意思是…没有统一性.我可以在Float,Long和其他autoboxeable类上使用or操作符,我可以在BigDecimal或BigInteger(它违反SRP)的情况下使用add()和negate().

所以如果我们允许这些操作在Byte / Short / Integer / Long(带有自动装箱和运算符)上,那为什么不只是在Number中添加一个抽象的Number()和

有没有理由呢?

解决方法

最重要的是要保持向后兼容性.

您提到的这些方法不在java.lang.Number的第一个版本中,它们需要是抽象的.
为什么抽象?假设你创建了你自己的ComplexNumber子类,然后它有一个negate()方法,现在一个否定()方法被添加到Number.
如果negate()方法不是抽象的,那么在java.lang.Number中应该有一个它的一般实现.应该返回什么类型的对象?这是没有可能的好的决定.如果它是一个Double,像这样:public Number negate(){return new Double(this.doubleValue()); }?这将会将您的ComplexNumber突然转换为双倍的否定值.

并且添加抽象方法将不起作用,因为它将破坏Number的现有第三方子类,因此会破坏向后兼容性.

向后兼容性是现在似乎很明显的很多可能的API改进无法实现的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读