Fri*_*jof 10 java final immutability
在检查Java BigDecimal类的源代码时,我很惊讶它没有被声明为final class:
类BigDecimal
Run Code Online (Sandbox Code Playgroud)public class BigDecimal extends Number implements Comparable<BigDecimal>不可变的,任意精度的带符号十进制数.
(来自Oracle Docs)
是否有特定原因或开发人员忘记添加该关键字?不将不可变类声明为final是不错的做法?
同样的情况也适用BigInteger,但不是String宣布为最终的.
JB *_*zet 14
引自https://blogs.oracle.com/darcy/entry/compatibly_evolving_bigdecimal:
但是,由于BigDecimal不是最终的,并且因为它具有公共构造函数,所以这里可能存在复杂性,因此它可以是子类.(正如Effective Java,Item 13,Favor Immutability中所讨论的,这是在编写类时的设计疏忽.)
(强调我的).
由于Java总是倾向于向后兼容,因此现在最终使它成为最终版本是不可能的:它会破坏现有的子类.
也就是说,就像使用Date时一样,我只是假设没有人将BigDecimal子类化,因此BigDecimal应该被用作真正不可变的.
| 归档时间: |
|
| 查看次数: |
3435 次 |
| 最近记录: |