2014-11-02 82 views
0

我正在制作一个程序,该程序构造一个接受各种对象的集合。但是,当我尝试克隆集时,我得到了CloneNotSupportedException,尽管声明了CloneNotSupportedException并实现了Cloneable接口。实现Cloneable并声明CloneNotSupportedException,但仍然获得CloneNotSupportedException

下面的代码,

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(); 
} 
} 

任何帮助,将不胜感激。

回答

3

您没有收到CloneNotSupportedException。将您从编译器错误,taht说,因为克隆方法抛出CloneNotSupportedException的,你需要或者捕获异常,或者宣布其在throws子句中,就像任何其他的checked exception:

没有报告异常java.lang.CloneNotSupportedException;必须捕获或声明抛出

2

你得到错误,因为clone()可以委派一个CloneNotSupportedException给调用者,但你的处理可能的例外存在。要做到这一点环绕Object mc=mb.clone();线在main方法用try/catch块:

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(); 
} 
相关问题