gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:56 26 4
gpt4 key购买 nike

在检查Java的源代码时BigDecimal类,令我惊讶的是它声明为最终类:

Class BigDecimal

public class BigDecimal
extends Number
implements Comparable<BigDecimal>

Immutable, arbitrary-precision signed decimal numbers.

(来自Oracle Docs)

这是否有特定原因,或者开发人员只是忘记添加该关键字?不将不可变类声明为 final 是一种好习惯吗?

BigInteger 也是如此, 但不适用于 String这被宣布为最终的。

最佳答案

引自 https://blogs.oracle.com/darcy/entry/compatibly_evolving_bigdecimal :

However, there is a possible complication here since BigDecimal is not final and since it has public constructors, it can be subclassed. (As discussed in Effective Java, Item 13, Favor Immutability, this was a design oversight when the class was written.)

(强调我的)。

由于 Java 一直倾向于向后兼容,现在将其定为 final 是毫无疑问的:它会破坏现有的子类。

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

关于java - 为什么 Java 的 BigDecimal 类没有声明为 final?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com