バウティスタ:
たぶん私はちょうど停電を抱えているが、私は私の問題を解決するための実現可能な方法を見つける傾けます。
私はシングルトンオブジェクトの持つClass A
含有しましたArrayList<Item>
。でClass C
、私は特定の必要Item
のArrayList<Item>
(クローンそれを)。一方でArrayList<Item>
変わらなければなりません、私はにいくつかの変更を適用する必要があるItem
の中でClass C
。私は中のCloneableを実装してみましたClass Item
。このように:
public class Item implements Cloneable {
private ArrayList<String> mSize = new ArrayList<>();
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public void modifySomething() {
mSize.clear();
}
}
その後私が取得したいItem
、このように:
class C {
void foo() {
Item item = null;
try {
item = (Item) A.getInstance().getItems().get(0).clone();
item.modifySomething();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
問題があるということItem item
も、シングルトンオブジェクトに変更されます。
Q:私はこれに間違ったアプローチを取っていましたか?どのように私は必要な動作を得ることができますか?
GhostCat敬礼モニカC.:
ここに:
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
それは基本的には「何のOP」ではありません。それはないない魔法の新しいものにあなたのリストの内容をコピーします。そして、ちょうどレコードの:のための任意の方法、それは本当に無意味ですオーバーライドが、その後、唯一のスーパーメソッドの実装を呼び出すこと。そして、あなたにもできます。ただ、そのメソッドをオーバーライドしません。
だから、どちらかの異なるメカニズムを使用するか、または本当に新しいリストを作成するために、カスタムコンテンツと、そのメソッドを上書きします。そうでなければ、あなたのクローンとオリジナルのItemオブジェクトは、上で動作し、同じリストインスタンス。