首页/开发/代码质量与评审速查/手法:Replace Primitive with Object(以对象取代基本类型)
重构手法62 条

手法:Replace Primitive with Object(以对象取代基本类型)

为有约束的原始值建立值对象:金额带币种、电话号码带格式、温度带单位;校验、格式化和运算都有归属,类型错误在编译期或构造期即暴露。

场景原始值有格式/范围/单位约束、需要重复校验
实现要点构造校验 + 不可变 + 相等性
配套Replace Type Code with Class

Java 示例

Java 示例
final class Money {
    private final BigDecimal amount;
    private final Currency currency;

    Money(BigDecimal amount, Currency currency) {
        this.amount = amount.setScale(2, RoundingMode.HALF_UP);
        this.currency = currency;
    }
}

易错点

  • 引入对象后仍到处 getAmount() 再计算:应把运算移进对象
  • 可变值对象参与哈希集合:相等性假设被破坏

数据来源与参考

  • 《重构》第 2 版 · 第 7 章(Replace Primitive with Object)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌