aho*_*der 5 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;
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您必须调用(A) super.clone()而不是new A(),并且您的类必须实现该Cloneable接口.