java 如何使字段不可克隆
java how to make a field not cloneable
对于序列化,瞬态字段将被排除。克隆有没有类似的关键字?如何从克隆中排除一个字段?
public class Foo implements Cloneable {
private Integer notInClone;
}
据我所知,没有可以做到这一点的特定注释。
您可以覆盖 Object#clone
方法,并在转换后在返回的 Object
上有选择地将不可克隆字段的值设置为 null
。
克隆的对象仍将具有该字段,因为它应该显式转换为相同的 class,但该值将是 null
。
既然你必须实现clone()
,如果你想让它成为public(它不是Cloneable
接口的一部分,并且是protected
在 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;
}
对于序列化,瞬态字段将被排除。克隆有没有类似的关键字?如何从克隆中排除一个字段?
public class Foo implements Cloneable {
private Integer notInClone;
}
据我所知,没有可以做到这一点的特定注释。
您可以覆盖 Object#clone
方法,并在转换后在返回的 Object
上有选择地将不可克隆字段的值设置为 null
。
克隆的对象仍将具有该字段,因为它应该显式转换为相同的 class,但该值将是 null
。
既然你必须实现clone()
,如果你想让它成为public(它不是Cloneable
接口的一部分,并且是protected
在 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;
}