为什么Java的BigDecimal类没有声明为final?

弗里斯约夫

在检查JavaBigDecimal的源代码时,令我惊讶的是它没有声明为final class

类BigDecimal

public class BigDecimal
extends Number
implements Comparable<BigDecimal>

不可变的,任意精度的带符号十进制数字。

(来自Oracle文档

是否有特定原因,或者开发人员只是忘记添加该关键字?最好不要将不可变的类声明为final?

同样适用于BigInteger,但未String声明为final。

JB Nizet

引用https://blogs.oracle.com/darcy/entry/compatfully_evolving_bigdecimal

但是,由于BigDecimal不是最终的,并且因为它具有公共构造函数,因此可以将其子类化,因此这里可能存在复杂性。(正如在有效Java,第13项,不变性的讨论中所讨论的,这是编写类时的设计疏忽。)

(强调我的)。

由于Java一直都向后兼容,因此将其最终定型是毫无疑问的:它将破坏现有的子类。

就是说,就像使用Date一样,我只是假设没有人继承BigDecimal,因此应该将BigDecimal当作真正不可变的来使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Reads没有声明为协变?

来自分类Dev

Java为什么在没有设置方法的情况下为什么需要将实例变量声明为final

来自分类Dev

程序在没有声明wait()函数后编译,并且可以正常工作。为什么?

来自分类Dev

为什么没有新关键字声明为函数的变量未定义?

来自分类Dev

如何序列化带有声明为接口的属性的类?

来自分类Dev

为什么我们不能在Java中将整个类声明为已同步?

来自分类Dev

为什么将Optional <T>声明为最终类?

来自分类Dev

为什么将“程序”类声明为静态?

来自分类Dev

为什么将IUnknown类中的方法声明为__stdcall

来自分类Dev

PHP类::为什么要声明为新的?

来自分类Dev

没有声明的括号

来自分类Dev

为什么Model在MVC中只有声明?

来自分类Dev

打字稿:使用私有,公开和什么都没有声明类变量之间的区别

来自分类Dev

从内部类内部访问的Java局部变量;需要声明为final,为什么它可以在NetBeans中工作?

来自分类Dev

为什么将私有字段的副本声明为“最终”

来自分类Dev

为什么在Java中将数组声明为对象正确?

来自分类Dev

为什么main()在Java中声明为public和static

来自分类Dev

托管Bean ManagedBean的托管Bean类java.time.ZonedDateTime没有声明公共的无参数构造函数

来自分类Dev

为什么没有将一个函数声明为type.CoroutineType类型的异步函数?

来自分类Dev

在将main声明为int main(void)时,为什么在传递命令行参数时没有错误?

来自分类Dev

为什么我需要将这个函数声明为extern。没有它就可以工作

来自分类Dev

为什么不能在没有参数的情况下传递声明为需要参数的swift函数?

来自分类Dev

为什么我的TextToSpeech没有声音?

来自分类Dev

为什么我没有声音了?

来自分类Dev

为什么视频下载后没有声音

来自分类Dev

为什么AVAudioPlayer没有声音?

来自分类Dev

为什么我没有声音了?

来自分类Dev

灿Java的main()方法被声明为final?

来自分类Dev

动作没有声明的类型错误

Related 相关文章

  1. 1

    为什么Reads没有声明为协变?

  2. 2

    Java为什么在没有设置方法的情况下为什么需要将实例变量声明为final

  3. 3

    程序在没有声明wait()函数后编译,并且可以正常工作。为什么?

  4. 4

    为什么没有新关键字声明为函数的变量未定义?

  5. 5

    如何序列化带有声明为接口的属性的类?

  6. 6

    为什么我们不能在Java中将整个类声明为已同步?

  7. 7

    为什么将Optional <T>声明为最终类?

  8. 8

    为什么将“程序”类声明为静态?

  9. 9

    为什么将IUnknown类中的方法声明为__stdcall

  10. 10

    PHP类::为什么要声明为新的?

  11. 11

    没有声明的括号

  12. 12

    为什么Model在MVC中只有声明?

  13. 13

    打字稿:使用私有,公开和什么都没有声明类变量之间的区别

  14. 14

    从内部类内部访问的Java局部变量;需要声明为final,为什么它可以在NetBeans中工作?

  15. 15

    为什么将私有字段的副本声明为“最终”

  16. 16

    为什么在Java中将数组声明为对象正确?

  17. 17

    为什么main()在Java中声明为public和static

  18. 18

    托管Bean ManagedBean的托管Bean类java.time.ZonedDateTime没有声明公共的无参数构造函数

  19. 19

    为什么没有将一个函数声明为type.CoroutineType类型的异步函数?

  20. 20

    在将main声明为int main(void)时,为什么在传递命令行参数时没有错误?

  21. 21

    为什么我需要将这个函数声明为extern。没有它就可以工作

  22. 22

    为什么不能在没有参数的情况下传递声明为需要参数的swift函数?

  23. 23

    为什么我的TextToSpeech没有声音?

  24. 24

    为什么我没有声音了?

  25. 25

    为什么视频下载后没有声音

  26. 26

    为什么AVAudioPlayer没有声音?

  27. 27

    为什么我没有声音了?

  28. 28

    灿Java的main()方法被声明为final?

  29. 29

    动作没有声明的类型错误

热门标签

归档