3
考慮下面的代碼:爲什麼不可變類提供增變器?
bdval = new BigDecimal(strval, new MathContext(attrib.getPrecision()));
bdval.setScale(attrib.getScale(), RoundingMode.HALF_UP);
PMD完全正確說:
不可變
浪費動作,因而,爲什麼不可變類,如BigDecimal
出口增變了性質?
話,我會說這是設計不良api.It應該是靜態方法,它違反了單一職責原則。 – Inquisitive 2013-03-17 14:53:42
如果'setScale'是靜態的,那麼代碼會更加冗長'BigDecimal.setScale(bdval,attrib.getScale(),RoundingMode.HALF_UP);'沒有真正的好處 - 邏輯仍然存在於BigDecimal類中。有一個很好的理由可以使BigDecimals的操作邏輯屬於BigDecimal類。 – 2013-03-17 15:03:43
當然,_naming_可以使用改進 - 我可能使用'withScale'而不是'setScale'。但我認爲該方法的位置很好。 – 2013-03-17 17:00:40