在检查JavaBigDecimal
类的源代码时,令我惊讶的是它没有声明为final class
:
类BigDecimal
public class BigDecimal extends Number implements Comparable<BigDecimal>
不可变的,任意精度的带符号十进制数字。
(来自Oracle文档)
是否有特定原因,或者开发人员只是忘记添加该关键字?最好不要将不可变的类声明为final?
同样适用于BigInteger
,但未String
声明为final。
引用https://blogs.oracle.com/darcy/entry/compatfully_evolving_bigdecimal:
但是,由于BigDecimal不是最终的,并且因为它具有公共构造函数,因此可以将其子类化,因此这里可能存在复杂性。(正如在有效Java,第13项,不变性的讨论中所讨论的,这是编写类时的设计疏忽。)
(强调我的)。
由于Java一直都向后兼容,因此将其最终定型是毫无疑问的:它将破坏现有的子类。
就是说,就像使用Date一样,我只是假设没有人继承BigDecimal,因此应该将BigDecimal当作真正不可变的来使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句