第50条:在必要时进行防御性复制

💡 原文约400字/词,阅读约需2分钟。
📝

内容提要

Java编程需要防御性编程以防止客户端违反类不变性。在参数验证之前应进行防御性复制以避免漏洞。Getter方法应返回可变对象的防御性副本以防止外部变更。防御性复制也适用于存储客户端提供的可变对象引用的可变类。在返回可变内部组件时,考虑返回防御性副本或不可变视图。尽可能使用不可变对象作为内部组件以避免需要防御性复制。防御性复制可能影响性能,因此可以考虑依赖文档或明确的使用合同等替代方案。使用防御性复制来保护类的完整性,除非成本不切实际或通过明确的文档建立了相互信任。

🎯

关键要点

  • Java编程需要防御性编程,以防止客户端违反类的不变性。
  • 在参数验证之前应进行防御性复制,以避免漏洞。
  • Getter方法应返回可变对象的防御性副本,以防止外部变更。
  • 防御性复制适用于存储客户端提供的可变对象引用的可变类。
  • 返回可变内部组件时,考虑返回防御性副本或不可变视图。
  • 尽可能使用不可变对象作为内部组件,以避免需要防御性复制。
  • 防御性复制可能影响性能,因此可以考虑依赖文档或明确的使用合同等替代方案。
  • 使用防御性复制来保护类的完整性,除非成本不切实际或通过明确的文档建立了相互信任。
➡️

继续阅读