2010-10-16 75 views
1

我想制作深度复制方法。有一天,我在这个问题上寻求帮助,但那是一个拷贝构造函数。现在我需要一个常规方法。我有创建的代码(非工作),但我只是不完全理解它。创建深度复制方法,Java

public GhostList deepCopy(){ 
     int length=this.getLength(); 
     GhostList jadeed=new GhostList(); 
     Ghost[] data = new Ghost[length]; 
     for (int i=0;i<this.getLength();i++){ 
      data[i] = new Ghost(); 
      data[i].setX(this.ghosts[i].getX()); 
      data[i].setY(this.ghosts[i].getY()); 
      data[i].setColor(this.ghosts[i].getColor()); 
      data[i].setDirection(this.ghosts[i].getDirection()); 
     } 

     return jadeed; 
    } 

现在,当我创建了一个名为jadeed新GhostList,然后在我创建鬼一个新的数据阵列,它知道该数据属于jadeed GhostList?我没有看到两者如何相关,即使他们应该是。

此外,我没有得到长度来匹配的副本和this.object。我的问题是什么?

回答

3

您创建了一个新的GhostList和一个新的Ghost阵列。
填写Ghost数组并返回GhostList,但返回的GhostListGhost数组无关。
您应该将所有新的鬼影添加到GhostList

+0

啊我明白了,谢谢! – Snowman 2010-10-16 22:20:32

2

首先,您提到了复制构造函数。如果您已经有工作,那么你需要在你的deepCopy方法做的是:

return new GhostList(this); 

让我们忘了为现在和送还给你发布的代码。您正在创建一个名为data的数组,但您从未在任何地方使用它。你不应该把这个数组分配给jadeed吗?喜欢的东西:

jadeed.ghosts = data; 

最后,而不是调用方法deepCopy,倒不如称之为clone并实现Cloneable接口。这样做可以让每个人都知道如何使用标准接口获取对象的副本。

1

您的GhostList类将拥有对Ghost数组的引用。您没有向我们展示类定义,因此可以说成员名为foo。现在,您需要做的就是使foo对象参照新创建的jadeed对象,请参阅您创建并填充的Ghost阵列。您可以这样做:

jadeed.foo = data; 

在您返回之前jadeed

+0

Jadeed是新的foo。 – 2010-10-17 00:38:41