1

我正在使用BigDecimals 并且我要求除以 0 不应导致ArithmeticException,而是返回 0 (奇怪的商业数学)。

这是一个相当新的要求,我们已经有相当多的代码,BigDecimal在很多地方都使用了 s。我不想遍历所有这些地方并实施零检查。这也不会帮助我使用 3rd 方库,它可能在内部使用BigDecimals 并会抛出一个ArithmeticException

我还想设置默认精度/比例并更改compareTo方法以忽略小的舍入误差。

由于所有这些将创建大量“样板”代码的全局更改,我想出了改变BigDecimal. 我之前已经为其他第 3 方课程做过此操作,以自己修复某些错误。

我通过在同一个包中创建一个具有相同名称的类来替换这些类,就像第 3 方类一样,并且因为外部 jar 文件将在我自己的类之后加载,所以我能够替换它们。

但是创建一个java.math.BigDecimal并没有帮助我,因为似乎“本机”Java 类甚至在我自己的类之前就已加载。

让我们假设我真的希望BigDecimal我的应用程序中的每个人都有点不同,我将如何替换“官方” BigDecimal?我可以这样做吗,是否还有其他一些我现在没有想到的技术问题?

4

2 回答 2

3

如果要覆盖内置类,则必须将类放在“引导”类路径中。至于实际这样做的智慧(即您的更改将影响整个jvm)......

于 2013-10-24T15:06:20.907 回答
2

BigDecimal不是最终的,所以你绝对可以自己扩展它,并改变它的行为(特别是通过覆盖 divideXXX() 方法)。

您不必更改参数等,但请记住更改实际使用的对象的类型!所以你将使用“你的”方法。

至于compareTo()等等,你也不会有任何问题——BigDecimal它自己实现Comparable了接口并有自己的compareTo().

于 2013-10-24T14:56:42.237 回答