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