您可以创建一个从BigDecimal扩展的CustomBigDecimal。然而,由于BigDecimal是不可变的,所以永远不会从父类继承状态(如缩放和舍入模式)。
我会去另一个答案中建议的实用程序类,或者也可以是将每个操作委托给一个实际的BigDecimal实例的包装器。这种方法的缺点是,您的全新CustomBigDecimal不会是BigDecimal,所以它们是不可互换的。
编辑:这种方法的缺点是你必须委派约50种方法。不是世界的尽头,IDE很好,但绝对不是很有吸引力…
毕竟,如果您仍然希望使CustomBigDecimal从BigDecimal继承,则需要使用装饰器方法:
public class CustomBigDecimal extends BigDecimal {
private final BigDecimal value;
private CustomBigDecimal(BigDecimal value) {
super(value.toPlainString()); // needed to compile,
// useless except for implicit null-check
this.value = value;
}
public CustomBigDecimal(String val) {
this(new BigDecimal(val).setScale(2, RoundingMode.HALF_UP));
}
@Override
public CustomBigDecimal abs() {
return new CustomBigDecimal(this.value.abs());
}
// TODO all other methods
}