2013-03-21 2 views
0

나는 깊은 사본에 클래스 방법을 구축을 위해 노력하고있다 : 나는 실행할 때, 그러나깊은 복사 시도

public MyClass clne() { 
    MyClass cpy = new MyClass(); 
    cpy.var1 = getVar1(); //getVar1 is a method returning the value of var1 
    cpy.var2 = getVar2(); 
    return cpy; 
} 

을 :

MyClass x = new MyClass(); 
x.var1 = 18; 
MyClass y = x.clne(); 
y.myMethod(); // Where myMethod is a method changing the value of var1 to, say 4. 
System.out.println(x.var1); 

x.var1의 값은 4

입니다

내가 잘못하고 있니? 고맙습니다 :)

+0

코드를 게시 하시겠습니까? – Patashu

+0

'var1'과'var2'의 종류는 무엇입니까? 그들은 int입니까? '정수 '? – rgettman

+1

'Integer'라고해도 'Integer'가 불변이므로 반드시 상관 없습니까? – Patashu

답변

0

원시 프리미티브가 아니라면 이전 참조를 가리키는 대신 var1의 새 인스턴스를 만들어야합니다.

cpy.var1 = new Var1(getVar1()); 

이 경우 Var1 클래스의 복사 생성자를 작성해야합니다. 그러나 다른 방법으로도이 작업을 수행 할 수 있습니다.

희망이 있습니다.

추신 : 기본적으로 얕은 복사본을 만들고 있습니다.

+0

OP는 그들이 객체가 아닌 프리미티브라고 말합니다 – Patashu

+0

새 Var1 또는 새 var1입니까? (차이가 나는 경우) – Dario

+0

var1의 유형에 따라 다릅니다. x.var1 = 4를 사용하여 할당하면 int 또는 Integer 중 하나 여야한다고 가정합니다. 즉 정적 멤버가 아니라면 작성한 내용이 정상적으로 처리되어야합니다. –