我发现clone没有完全克隆?为什么,请高手指教。
组件的继承关系:
JLabel->JParentLabel->BaseComponent->BaseLabel->Label
它们每个类都实现了implements java.lang.Cloneable接口,也重写了clone方法,除开BaseComponent组件后其它组件的代码量都很少,着重要BaseComponent类中处理许多事务。
JParentLabel->BaseLabel->Label三个类的clone的代码都是这样的格式:
public Object clone() throws CloneNotSupportedException{
JParentLabel jPL = null;
jPL = (JParentLabel) super.clone();
jPL.s = new BasicStroke();
return jPL;
BaseComponent类clone的方法体中加了一些对象的克隆,比如有Hashtable对象的克隆,具体如下:
//克隆
public Object clone() throws CloneNotSupportedException{
BaseComponent basecomponent = null;
basecomponent = (BaseComponent) super.clone();
basecomponent.hashtable = (Hashtable)hashtable.clone();
return basecomponent;
}
}
大致代码如下:
BaseComponent compA = new BaseComponent();compA.setToolTipText("compA");BaseComponent compB = (BaseComponent)compA.clone();compB.setToolTipText("compB");System.out.println(compA .getToolTipText());System.out.println(compB .getToolTipText());发现打印后的值都为“compB”,并且当我修改compB的宽高时,compA的宽高也被改了,但我跟踪发现hashtable是已经被克隆出来了,这是为何啊?求各位帮帮我!!!!!!!!
组件的继承关系:
JLabel->JParentLabel->BaseComponent->BaseLabel->Label
它们每个类都实现了implements java.lang.Cloneable接口,也重写了clone方法,除开BaseComponent组件后其它组件的代码量都很少,着重要BaseComponent类中处理许多事务。
JParentLabel->BaseLabel->Label三个类的clone的代码都是这样的格式:
public Object clone() throws CloneNotSupportedException{
JParentLabel jPL = null;
jPL = (JParentLabel) super.clone();
jPL.s = new BasicStroke();
return jPL;
BaseComponent类clone的方法体中加了一些对象的克隆,比如有Hashtable对象的克隆,具体如下:
//克隆
public Object clone() throws CloneNotSupportedException{
BaseComponent basecomponent = null;
basecomponent = (BaseComponent) super.clone();
basecomponent.hashtable = (Hashtable)hashtable.clone();
return basecomponent;
}
}
大致代码如下:
BaseComponent compA = new BaseComponent();compA.setToolTipText("compA");BaseComponent compB = (BaseComponent)compA.clone();compB.setToolTipText("compB");System.out.println(compA .getToolTipText());System.out.println(compB .getToolTipText());发现打印后的值都为“compB”,并且当我修改compB的宽高时,compA的宽高也被改了,但我跟踪发现hashtable是已经被克隆出来了,这是为何啊?求各位帮帮我!!!!!!!!
解决方案 »
- new 一个 Date,用 eclipse 输出,怎么有错误呢
- 关于JAVA
- 100分求 怎么实现一个能够显示对话的窗口?
- 请教论坛各位大虾,如何将一个字符串加密成Long类型的数据?最好是用DES加密~~谢了
- 在下拉框中选择所有分类时,应该传递什么参数?在线等
- [200分]求一JAVA 代码-产生一个0到100的随机数,要求随机数大于50时抛出,用自定义异常
- JAVA调用一个DLL的驱动程序
- jPanel键盘监听会卡
- JNI的使用中GetIntField()参数怎么写?
- 初学者问题:Exception in thread "main" java.lang.NoClassDefFoundError: Welcome
- 选择下拉菜单不同选项时事件触发另一个JList类显示不同的消息
- 学java快2年了,居然不知道System.out.write干什么用的
应为:
Label compA = new Label();compA.setToolTipText("compA");BaseComponent compB = (BaseComponent)compA.clone();compB.setToolTipText("compB");System.out.println(compA .getToolTipText());System.out.println(compB .getToolTipText());