请考虑以下代码:
bdval = new BigDecimal(strval, new MathContext(attrib.getPrecision()));
bdval.setScale(attrib.getScale(), RoundingMode.HALF_UP);
PMD非常正确地说:
对Immutable的无用操作
那么为什么像BigDecimal
这样的Immutable类会为属性导出mutators呢?
答案 0 :(得分:8)
setScale()
不会改变它所调用的BigDecimal。它返回BigDecimal的副本,其中包含新的缩放值。
PMD报告错误,因为您的代码错误:它忽略了操作的结果,使操作无效。你的代码应该是:
bdval = bdval.setScale(attrib.getScale(), RoundingMode.HALF_UP);