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

前端之家收集整理的这篇文章主要介绍了java – 为什么Number类没有add()或negate()等方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
那么这是一个关于 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改进无法实现的原因.

猜你在找的Java相关文章