引用发生的奇怪问题,Java达人请入内指点。

junglesong 2005-04-18 02:04:00
代码如下:
classA entityTak1=new classA();

// PAK1 Process
entityTak1=entityTmp;
entityTak1.setPNumber("");
entityTak1.setPortion("");
entityTak1.setHiritsu("* "+String.valueOf(dRatio));
entityTak1.setSyubetsu("");
entityTak1.setKisan1("");
entityTak1.setKessaiJyoken1("");
listRearranged.add(entityTak1);

classA entityTak2=new classA();

// PAK2 Process
entityTak2=entityTmp;
entityTak2.setPNumber("");
entityTak2.setPortion("");
entityTak2.setHiritsu("");
entityTak2.setSyubetsu("");
entityTak2.setKisan1("");
entityTak2.setKessaiJyoken1("");
entityTak2.setTsuka("税抜");

listRearranged.add(entityTak2);

这段代码的原意图是想把初始链表中原有的一条数据根据业务分解成两条,也就是从entityTmp中分解出entityTak1和entityTak2(注:这三个实例的类型一致为classA),再把这两个新实例插入到重排序链表中。

结果执行后发现,重排序链表listRearranged插入了两条一样的数据,它们都和entityTak2中的数据一致,entityTak1中的数据被清除了。

我认为是引用使用错误,所以现在用以下语句替代entityTak2(entityTak1)=entityTmp一句来解决问题,
。。。。
entityTak1.setPNumber(entityTmp.getPNumber());
entityTak1.setPortion(entityTmp.getPortion());
entityTak1.setHiritsu(entityTmp.getHiritsu());
entityTak1.setSyubetsu(entityTmp.getSyubetsu());
。。。。

现在问题解决了,但是这样的代码耦合性大且不美观,请问如何修改把上述传值的过程放入到classA类中去,并请剖析一下发生错误的根本原因,谢谢。


...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
junglesong 2005-04-18
  • 打赏
  • 举报
回复
public Object clone() {
lassAobj = null;
try {
obj =(classA) super .clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}

return obj;
}

我书写了上述clone方法,调试似乎没有问题,请问这样写对不对,是否深度克隆?注:classA中全是String类型的成员变量。

随风来去 2005-04-18
  • 打赏
  • 举报
回复
clone吧,要不写个方法,从一个entityTmp 复制到 entityTakN
kingfish 2005-04-18
  • 打赏
  • 举报
回复
entityTak1=entityTmp.clone(); //能否用要看你的类(深clone,浅clone)
junglesong 2005-04-18
  • 打赏
  • 举报
回复
再Ding一下。
junglesong 2005-04-18
  • 打赏
  • 举报
回复
to kingfish(八百里秦川@龙城异客):

请问我如果要做两个新实例,其内容要和entityTmp完全一样,并且修改不影响其它实例,请问有什么好办法?
kingfish 2005-04-18
  • 打赏
  • 举报
回复
entityTak1=entityTmp; // 前面classA entityTak1=new classA();还有什么用?
...
entityTak2=entityTmp; // 同上

所以你修改的只有entityTmp

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧