Effective Java 学习笔记第24条 --- 需要时使用保护性拷贝

假设类的使用者会尽一切手段来破坏这个类的约束条件,在这样的前提下,你必须保护性地设计程序。面对客户的不良行为时仍然能保持健壮性的类。
对于一个非可变类,可以考虑对其构造函数的可变参数采用保护性拷贝,如

public period(Date start, Date end){  
    this.start = new Date(start.getTime());  
    this.end = new Date(start.getTime());  
    // 接着做其他逻辑(保护性拷贝要在其他逻辑之前进行,并且有效性检查是针对拷贝后的对象,而不是原始对象)  
} 

public period(Date start, Date end){
    this.start = new Date(start.getTime());
    this.end = new Date(start.getTime());
    // 接着做其他逻辑(保护性拷贝要在其他逻辑之前进行,并且有效性检查是针对拷贝后的对象,而不是原始对象)
} 

对获取参数的get方法也要采用clone的方式返回,如:

public Date getStart(){  
     return (Date)start.clone();  
} 

public Date getStart(){
     return (Date)start.clone();
} 

记住非零长度的数组总是可变的,尽量使用非可变的对象作为内部组件,这样就不必关心保护性拷贝问题.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ilibaba/archive/2009/04/02/4042722.aspx

 

你可能感兴趣的:(java,.net,Blog)