2013-10-29 3 views
0

개체에 대한 참조를 한 개체에서 다른 개체로 이동하려고합니다. 따라서 개체를 이동할 때 참조를 제거하고 이동할 개체에 대한 참조를 추가하려고합니다.한 개체에서 다른 개체로 참조를 이동하려면 어떻게해야합니까?

내가 몇 가짜 클래스와 내가 할 수있는 최선으로 장면 설정하려고합니다 :

그래서 나는 개구리의 컬렉션을 가지고있는 소유자,이 밖으로 대여 할 수있다 D : 개구리, 소유자, 고객을 고객에게. 고객은 한 개구리에 대한 참조 만 가질 수 있습니다. 그래서 개구리가 빌려지면 그 개구리에 대한 참조가 고객 클래스에 생성 될 수 있고 개구리는 개구리의 소유자 컬렉션에서 제거 될 수 있습니다.

제가 알고 싶은 것은이 동작을 어떻게 바꾸는 지입니다. 고객이 개구리를 돌려주기를 원할 때 개구리 null을 참조하는 고객의 인스턴스 변수를 만들 수 있습니다. 그러나이 개구리를 참조하지 않고 소유자에게 반환하는 방법을 잘 모릅니다. 예를 들면

public void returnFrog() 
{ 
owner.returnFrog(frog); 
frog = null; 
} 

인스턴스 변수를 null로 설정하자마자 소유자에게 반환 된 참조도 null이됩니다.

내가 이것을 할 수있는 유일한 방법은 고객이 한 개구리 목록을 가지고 있고 목록에서 개구리를 제거하는 것입니다. 이 방법은 참조가 null로 설정되지 않습니다. 그러나 이것을 수행하는 더 좋은 방법이 있습니까? 나는 하나의 가치 만 필요하다면 List를 사용하지 않아야한다고 단호합니다. : (

또는 나는 물건을 움직일 수 없었고 개구리가 고객과 연결되어 있는지 여부를 추적 할 수 없었습니다. 그렇다면 다른 고객과 연결할 수 없습니다. ..)

다행스럽게도 필자는 기본 뭔가가 아니에요

+0

코드에 대해 생각하는 것이 좋습니다. 질문하는 것이 좋습니다. 외모를 시험해 보는 것도 좋습니다.이 코드를 실행 해 보았습니까? –

+0

나는 개구리를 소유자의 목록에서 제거하는 것이 디자인 오류라고 생각합니다. 개구리를 고객에게 빌려주더라도 소유자는 여전히 개구리를 소유하고 있습니다. 나는 'null'이 개구리가 빌려 질 수 있다는 것을 의미하는 Customer에서 참조를 보유하고있는 Frog의 필드를 사용할 것입니다. – Bohemian

답변

1

변수와 참조가 어떻게 작동하는지 오해했습니다.

이 라인 :

frog = null; 

내가 가정 frog 변수에 값을 할당 nullCustomer 클래스의 인스턴스 변수이다. 다른 변수에는 영향을 미치지 않습니다!

그래서,이 줄 경우 :

owner.returnFrog(frog); 

Owner에서 변수로 문제의 양서류에 대한 참조를 저장 끝, 그 기준은 여전히 ​​변수에 null을 할당 한 후이있을 것 User.

물리적 인 은유는 건물의 주소를 종이에 씁니다. 좋은 미용사의 주소가 적힌 종이가 있고, 종이 한 장을 가지고 있다고 가정 해보십시오. 너는 나에게 주소를 말하면 나는 그것을 적어 둔다. 이제 종이 조각을 지 웁니다. 제 종이가 비어 있습니까?

+0

도움을 주셔서 감사합니다. 왜 이렇게 단호했는지 확신 할 수 없었습니다. – user2585188

1

작품 위의 코드를, 당신의 기대는 아마 잘못된 : 참조 frog (= 변수 frog 점)까지의 인스턴스를 추가 returnFrog() 방법 owner 인스턴스의 개구리 목록

이후 변수 frog에 새 값을 할당해도 returnFrog() 내부에서 실행되는 코드에는 아무런 영향이 없습니다. 인스턴스에 대한 별칭으로 frog 생각하면

이 더 분명해진다 :

Frog a = new Frog(); 
b = a; // doesn't copy the frog 
b = null; // doesn't change a 

이가 개구리를 복사하지 않습니다; 여전히 단일 인스턴스가 있지만 다른 시간에 다른 변수에이 인스턴스를 가리키는 참조가 포함되어 있습니다. 그러나 참조를 변경하는 것은 인스턴스를 변경하지 않기 때문에 참조 b을 변경하면 a에 영향을주지 않습니다. 그냥 참조를 변경합니다.

+0

도움을 주셔서 감사합니다. 왜 내가 단호했는지 확신 할 수 없었습니다. – user2585188

관련 문제