2011-03-25 4 views
2

내가 만든 개체가 있다고 가정 해 보겠습니다. 나는 그것이 참조한 새로운 객체()와는 다른 값을 가지도록 편집했다. 그 객체 f1을 호출 할 수있게합니다. 이제 나는 f2라는 다른 객체가 f1의 복사본이지만 포인터는 아니기를 바랍니다. 따라서 f2의 값을 변경할 때 f1도 변경되지 않습니다. 어떻게 내가 자바에서 이렇게 할까?포인터 대신 java에서 개체 복사본을 만드는 방법

+1

중복 : http://stackoverflow.com/questions/869033/how-do-i-copy-an-object-in-java –

+0

난 당신이 복제 방법 경우에 그것을 할 수 있습니다 믿습니다 귀하의 개체는 복제 가능을 구현합니다. http://download.oracle.com/javase/tutorial/java/IandI/objectclass.html 자세한 정보는 – blong824

답변

12

먼저 클래스에 Cloneable 인터페이스를 구현하게하십시오. 이 기능이 없으면 객체에 clone()을 호출하면 예외가 발생합니다.

다음으로 특정 개체 유형을 반환하도록 Object.clone()을 재정의하십시오. 구현은 다음과 같이 간단히 수행 할 수 있습니다. 더 복잡한 작업이 필요한 경우가 아니면

@Override 
public MyObject clone() { 
    return (MyObject)super.clone(); 
} 

이 있습니다. 그래도 super.clone()으로 전화하십시오.

계층 구조를 위로하여 Object.clone()으로 호출하여 개체의 각 데이터를 새로운 개체로 복사합니다. 참조가 복사되고 복제되지 않으므로 전체 복사본 (객체가 참조하는 객체의 복제본)을 원한다면 재정의 한 clone() 함수에서 추가 작업을 수행해야합니다.

5

대부분의 객체는 그 객체의 복사본을 반환하는 방법 clone()를 가지고 귀하의 경우

f2 = f1.clone() 
-2

당신이 복제 할 수 또는 복제 할 수없는 경우에 당신이 그것을 위해 자신의 기능을 쓸 수에 대해 배울 수 있습니다. 이 질문의

function (variable){ 
    clone = JSON.parse(JSON.stringify(variable)) 
    return clone; 
} 
+0

Java에 대한 질문은 javascript가 아닙니다. –

관련 문제