簡體   English   中英

如何將引用從一個對象移動到另一個對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM