SE450: Java classes: cloning implementation [19/22] ![]() ![]() ![]() |
Simple:
public class MyClass extends HerClass implements Clonable {
public Object clone throws CloneNotSupportedException {
return super.clone();
}
// ...
}
But what about
public class IntegerStack implements Clonable {
private int[] buffer;
private int top;
public IntegerStack(int maxContents) {
buffer = new int[maxContents];
top = -1;
}
public void push(int val) {
buffer[++top] = val;
}
public int pop() {
return buffer[top--];
}
}
What does the default clone method do?
Fix this by overriding clone
public Object clone() {
try {
IntegerStack nObj = (IntegerStack)super.clone();
nObj.buffer = (int[])buffer.clone();
return nObj;
} catch (CloneNotSupportedException e) {
// cannot happen since we and arrays support clone
throw new Error(e.toString());
}
}
To disallow cloning:
public final Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
There are alternatives:
public Foo(Foo foo)