Java如何使一个字段不可克隆

3

在序列化中,transient字段将被排除。那么,在克隆中是否有类似的关键字?如何从克隆中排除一个字段?

public class Foo implements Cloneable {
    private Integer notInClone;
}
2个回答

6

如果你想让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()方法。但对于这个特定的要求,“必须”是正确的,因为你必须实现clone()方法。 - Code-Apprentice
1
@Code-Apprentice 你说得对,我需要限定这个声明,因为一个类可以合法地将 clone() 保护起来以供内部使用。感谢您的评论! - Sergey Kalinichenko

4
据我所知,没有特定的注释可以做到这一点。
您可以重写Object#clone方法,并在转换后选择性地将不可克隆字段的值设置为null
克隆对象仍将包含该字段,因为它应明确转换为相同的类,但该值将为null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接