0

我正在制作一个程序,该程序构造一个包含各种对象的集合。但是,当我尝试克隆集合时,我得到了 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();
}
}

任何帮助,将不胜感激。

4

2 回答 2

3

您没有收到 CloneNotSupportedException。你从编译器得到一个错误,taht 说由于克隆方法抛出 CloneNotSupportedException,你需要捕获异常,或者在 throws 子句中声明它,就像任何其他检查的异常一样:

未报告的异常 java.lang.CloneNotSupportedException; 必须被抓住或宣布被扔掉

于 2014-11-02T18:38:20.570 回答
2

您收到该错误是因为clone()可以将 a 委托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的可能异常。CloneNotSupportedExceptionmb.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();
}
于 2014-11-02T18:39:06.890 回答