为什么不可变类提供了mutators?

时间:2013-03-17 14:48:58

标签: java immutability bigdecimal

请考虑以下代码:

    bdval = new BigDecimal(strval, new MathContext(attrib.getPrecision()));
    bdval.setScale(attrib.getScale(), RoundingMode.HALF_UP);

PMD非常正确地说:

  

对Immutable的无用操作

那么为什么像BigDecimal这样的Immutable类会为属性导出mutators呢?

1 个答案:

答案 0 :(得分:8)

setScale()不会改变它所调用的BigDecimal。它返回BigDecimal的副本,其中包含新的缩放值。

PMD报告错误,因为您的代码错误:它忽略了操作的结果,使操作无效。你的代码应该是:

bdval = bdval.setScale(attrib.getScale(), RoundingMode.HALF_UP);