在序列化中,transient字段将被排除。那么,在克隆中是否有类似的关键字?如何从克隆中排除一个字段?
public class Foo implements Cloneable {
private Integer notInClone;
}
如果你想让clone()
方法变成公共方法(它并不是Cloneable
接口的一部分,而且在Object
类中是受保护的),那么你必须实现它。这样一来,你就有机会清除掉代码中不需要的字段:
public Object clone() throws CloneNotSupportedException {
Foo res = (Foo)super.clone();
res.notInClone = null; // Do the cleanup for fields that you wish to exclude
return res;
}
Object#clone
方法,并在转换后选择性地将不可克隆字段的值设置为null
。null
。
Object
中有一个默认的clone()
方法。但对于这个特定的要求,“必须”是正确的,因为你必须实现clone()
方法。 - Code-Apprenticeclone()
保护起来以供内部使用。感谢您的评论! - Sergey Kalinichenko