[英]How can I move a reference from one object to another?
我正在嘗試將對象的引用從一個對象移動到另一個對象,從而在移動對象時刪除對象的引用,並將對該對象的引用添加到它移動到的對象。
我將嘗試使用一些假類來盡可能地設置場景:Frog,Owner,Customer:D
所以我有一個擁有青蛙系列的所有者,這些可以借給顧客。 客戶只能參考一只青蛙。 因此,當青蛙被借出時,可以在Customer類中創建對Frog的引用,並且可以從Frogs的所有者集合中刪除Frog。
我想知道的是我如何扭轉這一行動。 當我希望客戶給青蛙回來時,我可以為引用Frog null的Customer創建實例變量,但是我不知道如何在不引用它的情況下將此Frog返回給所有者,例如:
public void returnFrog()
{
owner.returnFrog(frog);
frog = null;
}
只要我將實例變量設為null,返回給所有者的引用也將變為null。
我能想到這樣做的唯一方法是讓客戶擁有一個Frog的List,只需將一個Frog從List中移除。 這樣,引用永遠不會設置為null,但是有更好的方法嗎? 我堅持認為如果我只需要一個值,我就不應該使用List。 :(
或者我無法移動對象,只是跟蹤青蛙是否與客戶相關聯 - 如果是,則無法鏈接到任何其他客戶(這是我的解決方案atm)。
希望我不會遺漏一些基本的東西。
上面的代碼有效,你的期望可能是錯誤的:方法returnFrog()
將引用frog
(=變量frog
指向的實例returnFrog()
添加到owner
實例中的frog
列表中。
之后為變量frog
分配一個新值對returnFrog()
內部執行的代碼沒有影響。
當您將frog
視為實例的別名時,這變得更加清晰:
Frog a = new Frog();
b = a; // doesn't copy the frog
b = null; // doesn't change a
這不會復制青蛙; 仍然只有一個實例,但在不同的時間,您有不同的變量包含指向此實例的引用。 但是更改引用b
不會影響a
因為為引用分配實例不會更改實例; 它只是改變了參考。
我認為你誤解了變量和引用是如何工作的。
這一行:
frog = null;
將值null
賦給變量frog
,我假設它是Customer
類的實例變量。 它不會影響任何其他變量!
所以,如果這一行:
owner.returnFrog(frog);
最終將對所討論的兩棲動物的引用存儲到Owner
的變量中,然后在將null賦值給User
的變量之后,該引用仍將存在。
一個物理比喻就是在紙上寫下建築物的地址。 假設你有一張紙上有一個好發型師的地址,我有一張白紙。 你告訴我地址,然后我把它寫下來。 現在你擦掉你的紙。 我的那張紙變成了空白嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.