首页/开发/代码质量与评审速查/手法:Encapsulate Collection(封装集合)
重构手法62 条

手法:Encapsulate Collection(封装集合)

返回集合时给出只读视图,修改走专用方法:调用方无法绕过校验与通知,集合的所有变更点收敛到类的内部;对数组、字典同样适用。

规则读给只读视图,写走显式方法
场景实体暴露内部列表、调用方 get 后就地增删

Java 示例

Java 示例
// 反例:return courses;

// 正例
public List<Course> courses() {
    return List.copyOf(courses);
}

public void addCourse(Course c) {
    if (c == null) throw new IllegalArgumentException();
    courses.add(c);
}

易错点

  • 每次 getter 全量拷贝大集合:热路径上复制开销显著
  • 只读视图允许外部元素可变对象继续被改:必要时再封装元素

数据来源与参考

  • 《重构》第 2 版 · 第 7 章(Encapsulate Collection)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌