我正在制作一个构建一个接收各种对象的集合的程序。但是,当我尝试克隆该集时,我得到了CloneNotSupportedException,尽管声明了CloneNotSupportedException并实现了Cloneable接口。
这是代码,
import java.util.ArrayList;
public class NewSet implements Cloneable {
private ArrayList<Object> objects;
public NewSet() {
this.objects=new ArrayList<Object>();
}
public void add(Object b) {
if(this.contains(b)) {
return;
}
else {
objects.add(b);
}
}
public boolean contains(Object h) {
for(int x=0; x<this.size(); x++) {
if(this.get(x)==h) {
return true;
}
}
return false;
}
public Object get(int i) {
return objects.get(i);
}
public int size() {
return objects.size();
}
public Object clone() throws CloneNotSupportedException {
NewSet copy= (NewSet) super.clone();
return copy;
}
public static void main(String[] args) {
NewSet mb= new NewSet();
mb.add("b");
mb.add("c");
mb.add("d");
Object mc=mb.clone();
}
}
任何帮助都将不胜感激。
答案 0 :(得分:3)
您没有收到CloneNotSupportedException。您从编译器收到错误,taht说由于clone方法抛出CloneNotSupportedException,您需要捕获异常,或者在throws子句中声明它,就像任何其他已检查的异常一样:
未报告的异常java.lang.CloneNotSupportedException;必须被抓住或宣布被抛出
答案 1 :(得分:2)
您收到该错误是因为clone()
可以将CloneNotSupportedException
委托给来电者,但您可以在那里处理可能的例外情况。为此,请使用try / catch块围绕Object mc=mb.clone();
方法中的main
行:
public static void main(String[] args) {
NewSet mb = new NewSet();
mb.add("b");
mb.add("c");
mb.add("d");
Object mc = null;
try {
mc = mb.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
现在main
方法处理方法调用CloneNotSupportedException
的可能mb.clone()
异常。
在main
方法中处理该异常的另一种方法是将throws
添加到方法中:
public static void main(String[] args) throws CloneNotSupportedException {
NewSet mb = new NewSet();
mb.add("b");
mb.add("c");
mb.add("d");
Object mc = mb.clone();
}