这是 Effective java 中防御性复制的一个例子。假设我的基本问题中的场景需要一个防御性副本,并且不能与要求客户避免改变传入的对象的评论有关。
public Period(Date start, Date end) {
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
}
问题:
如果
Date
没有构造函数来接收自己,为了使我的自我更通用,传递一个对象而没有复制自身的机制,并且这样的对象不属于我们,即我们不能以任何方式更改它,该怎么办?如果构造函数将类型参数作为参数,比如
Period(T object)
T 可能是可变的,那么需要防御性副本怎么办。我们不知道什么是T。在这种情况下如何进行防御性副本?什么是传递接口,其中某些子类确实具有构造函数,例如
Date
创建自己的对象,而其某些子类没有任何机制可以这样做?我们应该在防守端复制多深?假设我们复制了一个数组,但数组元素是可变的?