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接口的一部分,并且是protectedObject) 您将有机会清除代码中不需要的字段:

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;
}

Demo.