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