public class CommonCondtionPanel extends JPanel implements Cloneable
{
public Object clone()
{
CommonCondtionPanel condition=null;
try
{
condition = (CommonCondtionPanel)super.clone();
}
catch (Exception e)
{
e.printStackTrace();
}
return condition;
}
public CommonCondtionPanel getConditionPanel(CommonCondtionPanel condition)
throws Exception
{
CommonCondtionPanel conditionPanel = (CommonCondtionPanel)condition.clone();
}
}
在另一个类中我要多次调用CommonCondtionPanel :
CommonCondtionPanel condition = new CommonCondtionPanel ();
{
Test test1 = new Test(condition.getConditionPanel(condition ));
}
{
Test test2 = new Test(condition.getConditionPanel(condition ));
}
老是抛出java.lang.CloneNotSupportedException:
网上的解释是:
Object类的这个clone方法完全是为了子类覆盖它服务的,并不是让子类直接调用的,这也就是为什么在覆盖clone方法时一般到调用super.clone()的原因。clone方法是可以被覆盖的,但是必须实现Cloneable接口,所以你覆盖后,它就不会调用父类的方法,而调用你覆盖后的方法。
package com; import javax.swing.JPanel; public class Test { public static void main(String[] args) throws CloneNotSupportedException { A a = new A() ; Test t1 = new Test(a.getConditionA(a)) ; Test t2 = new Test(a.getConditionA(a)) ; Test t3 = new Test(a.getConditionA(a)) ; Test t4 = new Test(a.getConditionA(a)) ; } Test(A a ){ } } class A extends JPanel implements Cloneable{ @Override public Object clone() throws CloneNotSupportedException { A a = null ; a = (A)super.clone(); return a ; } public A getConditionA(A condition) throws CloneNotSupportedException{ A a = (A) condition.clone() ; return a; } }
new Test(a.getConditionA(a)) ;这一句也调用了4次,毫无问题!
--------------
1、或许你自己的程序那里不小心写错了吧 ?
2、其实你这个程序没有意义的,比如,假定我这里要clone的是一个关联了很多对象的类,那么要深拷贝,
可你的程序完全不合格了 !
我个人觉得,与其这样,倒不如用流来解决,当方便得多,虽然效率会低些 ...
没有用clone()的方法,原因是我实例一个对象,多次调用,只有最后一个生效,后来我在树的点击事件中重新添加了