2013-10-29 78 views
0

我試圖將一個對象的引用從一個對象移動到另一個對象,從而在移動對象時移除該對象的引用,並將引用添加到移動到的對象中。如何將參考從一個對象移動到另一個對象?

我會嘗試設置,盡我所能用幾個假類的情景:青蛙,業主,客戶:d

所以我誰擁有青蛙集合的所有者,這些可以被貸出去給客戶。客戶只能參考一隻青蛙。所以當一隻青蛙借出時,可以在客戶類中創建青蛙的參考,並且可以從青蛙的所有者集合中移除青蛙。

我想知道的是我如何反轉這個動作。當我想要一個客戶給青蛙回來時,我可以爲客戶引用Frog null的實例變量,但是我不確定如何將這個青蛙返回給所有者而不參考它,例如:

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

只要我使實例變量null,已經返回給所有者的引用也將變爲null。

我能想到做到這一點的唯一方法是讓客戶擁有一個青蛙列表,並簡單地從列表中移除一個青蛙。這樣引用永遠不會設置爲null,但有沒有更好的方法來做到這一點?我堅持我不應該使用List,如果我只需要一個值。 :(

或者我無法移動對象,只是跟蹤青蛙是否與客戶相關聯 - 如果是,它不能鏈接到任何其他客戶(這是我的解決方案atm 。)

但願我不是失去了一些東西基本

+0

關於代碼的思考很好。提出問題很好。嘗試的東西也很好 - 你有沒有試過運行這段代碼? –

+0

我認爲這是一個設計錯誤,從所有者的名單中刪除青蛙。所有者仍然擁有青蛙,即使他將青蛙借給客戶。我會在Frog中使用一個字段,該字段在Customer中包含一個引用,如果'null'表示青蛙可以借出。 – Bohemian

回答

1

我想你已經誤解了變量和引用是如何工作的。

這條線:

frog = null; 

null分配給變量frog,我假設是Customer類的一個實例變量。 它不會影響任何其他變量!

所以,如果這條線:

owner.returnFrog(frog); 

結束存儲有問題的兩棲類的引用到一個變量在Owner,那麼參考仍將是空的賦值給變量後有在User

一個物理隱喻會寫在紙上的建築物地址。假設你有一張紙,上面有一個好的理髮師的地址,我有一張空白的紙。你告訴我地址​​,然後我把它寫下來。現在你擦掉你的紙片。我的一張紙是空白的嗎?

+0

感謝您的幫助,不知道爲什麼我堅持這不是發生了什麼。 – user2585188

1

上述工程的代碼,您的期望很可能是錯誤:returnFrog()加上基準frog(=實例,其變量frog點)的方法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

相關問題