0

オブジェクトへの参照をあるオブジェクトから別のオブジェクトに移動しようとしているため、移動時にオブジェクトの参照が削除され、移動先のオブジェクトへの参照が追加されます。

いくつかの偽のクラスを使用して、できる限りシーンを設定しようとします: Frog、Owner、Customer :D

だから私にはカエルのコレクションを持っている所有者がいて、これらは顧客に貸し出すことができます。Customer は 1 つの Frog への参照のみを持つことができます。したがって、Frog が貸し出されると、その Frog への参照が Customer クラスで作成され、Frog は所有者の Frog コレクションから削除されます。

私が知りたいのは、このアクションを元に戻す方法です。Customer に Frog を返してもらいたい場合、Frog を参照する Customer のインスタンス変数を null にすることができますが、この Frog を参照せずに Owner に返す方法がわかりません。次に例を示します。

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

インスタンス変数を null にするとすぐに、所有者に返された参照も null になります。

これを行う唯一の方法は、Customer が 1 つの Frog の List を持ち、単に Frog を List から削除することです。この方法では、参照が null に設定されることはありませんが、これを行うためのより良い方法はありますか? 必要な値が 1 つだけの場合は、List を使用すべきではありません。:(

または、オブジェクトを移動して、カエルが顧客にリンクされているかどうかを追跡することはできませんでした。そうであれば、他の顧客にリンクすることはできません (これが私のソリューション atm です)。

うまくいけば、私は何か基本的なことを見逃していません。

4

2 に答える 2

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参照を変更するだけです。

于 2013-10-29T12:23:45.460 に答える
1

変数と参照がどのように機能するかを誤解していると思います。

この行:

frog = null;

変数に値nullを割り当てます。これは、クラスfrogのインスタンス変数であると想定しています。他の変数には影響しません。Customer

したがって、次の行の場合:

owner.returnFrog(frog);

問題の両生類への参照を の変数に格納することになりOwner、その参照は の変数に null を代入した後も存在しますUser

物理的なメタファーは、建物の住所を紙に書くことです。あなたは良い美容師の住所が書かれた紙を持っていて、私は白紙の紙を持っているとしましょう。あなたは私に住所を教えてくれます、そして私はそれを書き留めます。今、あなたは一枚の紙を消します。私の紙は白紙になりますか?

于 2013-10-29T12:25:05.937 に答える