2016-10-01 5 views
0

내 tempDictionary에서 제거하려면 removeAll 메소드를 호출했지만 d에서 제거합니다. 그렇다면 어떻게 프라이버시 누수를 피하고 tempDictionary에 새로운 참조를 할당 할 수 있습니까?기존 객체의 새 참조로 새 객체를 만드는 방법 java

public static void play1(Dictionary d, int level)throws IOException 
{ 
    Dictionary tempDictionary = d ; 
    tempDictionary.removeAll(); 
} 
//after looking to the link doesn't compile I tried to do exact same 

class Dictionary { 
private Dictionary dictionary; public Dictionary(Dictionary temp) { 
this.dictionary = temp.dictionary; // error 

} 
} 
+4

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

+0

클래스 사전 { ; 공공 사전 (사전 임시) { this.dictionary = temp.dictionary; // 작동하겠습니까 ?? } } – Anny

+0

복사 생성자에서 개체 자체가 아닌 사전 클래스 필드를 할당해야합니다. 사전 수업은 어떻게 구현 되었습니까? –

답변

0

당신이 할 때 :

Dictionary tempDictionary = d ; 

당신이 실제로 할 것은 당신이 (당신의 사건에 D) 기존 가리키는 두 번째 사전 참조를 만들 것입니다. 그래서 tempDictionary에서 수행하는 모든 동작은 모두 동일한 개체를 가리 키기 때문에 d에도 영향을줍니다. 이 문제를 해결하려면 d의 구성 요소를 새 사전에 복사하여 복사본에 원하는대로 복사하십시오.

편집 : 나는 새로운 인스턴스가 내가 지적 메르 Qarabsa 및 Tokazio에 reference.Thanks입니다 의미 새로운 keyword.What로 만들어지기 때문에 잘못 이전 대답 인스턴스 키워드를 사용했다.

+0

사전의 변수가 아닙니다. 일부는 Dictionary 인스턴스로 잘못 참조하는 경우가 있습니다. 인스턴스를 인스턴스라고 잘못 말하면됩니다. 인스턴스 = 개체 –

+0

사본으로 무엇을 의미합니까? – Anny

+0

@AmerQarabsa 나는 당신이 말하려고하는 것을 이해하지 못한다. 제발 잘못되었다고 설명하십시오. – theVoid

0

Java 반영을 사용하여 필드의 전체 복사본으로 계속 진행하십시오. kryo와 같은 기존 라이브러리를 사용하거나

관련 문제