0

以下のコード セクションでは、異なる xValues を持つ Objs の ArrayList が必要です。代わりに、4 行目で Obj n の xValue を設定すると、ArrayList 内の同じ名前を持つすべての Objs が同じ値に設定された xValue を取得します。

Obj n = new Obj();
n = getObj(event.getX(), event.getY(), view.getHeight(), view.getWidth(), view);

n.setXValue(view.getWidth());

if (currentMode == AppMode.MODE.code && n != null) {
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        arraylist.add(n);
    } // end if (event.getAction
}

私は何を間違っていますか?コレクション内の他のオブジェクトのプロパティを台無しにすることなく、オブジェクトのプロパティを設定できるコレクションはありますか?

4

2 に答える 2

1

オブジェクトに関して言えば、Java は「参照渡し」言語です。同じ Object を 2 つの異なるコレクションに配置すると、メモリ内の同じ場所へのポインターを各コレクションに渡すだけなので、一方の参照から加えた変更は他方の参照に影響します。

この動作が望ましくない場合は、 Object.clone() を使用してオブジェクトのコピーを作成してから新しいコレクションに入れるか、他の同様のコピー手法を使用する必要があります。

于 2013-04-16T23:59:52.070 に答える
0

Obj を作成し、Obj 内に XValue のような名前の静的変数があると思います。

変数を静的として指定すると、そのクラスのすべてのインスタンスで共有されるその変数の唯一のインスタンスが取得されるため、この動作になります。

または、トルクストンプが言ったこと (彼は正しい)

于 2013-04-16T23:58:53.630 に答える