2010-10-15 83 views
0

因此,讓我們說我想製作一個對象的深層副本,但使用它的contsructor。所以,我有:使用構造函數複製對象,Java

public class PositionList { 
    private Position[] data = new Position[0]; 
    private int size = 0; 

public PositionList(PositionList other, boolean deepCopy) { 
    if (deepCopy==true){ 
     size=other.getSize(); 
     for (int i=0;i<data.length;i++) 
     data[i]=other.data[i]; 
    } 
    else { 
     data=other.data; 
     size = other.size; 

所以說我這個被稱爲:

PositionList list = new PositionList(); 
PositionList acopy = new PositionList(list, true); 

我在做什麼,但是,不正確,林不知道爲什麼..

+0

那布爾檢查應該是'如果(deepcopy的==真)',甚至'如果(deepCopy)',對嗎? :) – BoltClock 2010-10-15 22:46:03

+0

亞太也..那只是等待代碼..我試圖找出其他的東西 – Snowman 2010-10-15 22:49:50

+0

寫'if(deepCopy == true)'是gauche。請改寫'if(deepCopy)'。 – 2010-10-15 23:24:04

回答

1

問題就在你深複製邏輯:

size=other.getSize(); 
for (int i=0;i<data.length;i++) 
    data[i]=other.data[i]; 

您設置size場(這是多餘的智慧h data數組),但沒有將新數組分配給data字段,這大概是「深」副本的全部要點。你應該初始化data其他的size(或other.data.length):

data = new Position[other.data.length]; 
for (int i=0;i<data.length;i++) 
    data[i]=other.data[i]; 

(而擺脫size一起)

+0

等待爲什麼我會擺脫大小? – Snowman 2010-10-15 23:39:21

+0

@fprime,'size * * ever *包含哪個值與'data.length'不匹配? – 2010-10-15 23:53:49