将类枚举传递给克隆是否可以克隆?

时间:2012-01-17 00:00:55

标签: java enums clone pass-by-reference pass-by-value

我有一个简单的类,它包含一个更大,更庞大的类的骨架。所有这些骨架都是一个字符串id,一个类型枚举和一些选项标志。

我希望能够克隆这个骨架,但我不知道枚举是否是克隆安全的(按值传递)。我认为他们不是因为他们被视为类(通过引用传递)。将枚举传递给克隆是否安全?

清晰度示例:

class A {
    String id;
    Enum state;
    int flags;

    A clone() {
        A ret = new A();
        ret.id = id;
        ret.state = state; // Am I safe here?
        ret.flags = flags;
        return ret;
    }
}

2 个答案:

答案 0 :(得分:12)

根据定义,枚举实例是单例。根据设计,每个枚举实例只有一个实例。很明显,你唯一能做的就是复制它的参考资料。

答案 1 :(得分:5)

JB Nizet 的回答是对的。但是,以防万一你试图覆盖 Object.clone(),请注意在Java中克隆对象的官方方法是这样的:

class A implements Cloneable {
    String id;
    Enum state;
    int flags;

    public A clone() {
        A ret = (A) super.clone();
        ret.id = id;
        ret.state = state;  // Enum is a singleton, so this is ok
        ret.flags = flags;
        return ret;
    }
}

请注意,您必须致电(A) super.clone()而不是new A(),并且您的班级必须实施Cloneable界面。

相关问题