私のクラスに問題があります。オブジェクト属性が同じインスタンスを共有しています
public class Sequence {
private ArrayList<Spell> spells;
public Sequence(ArrayList<Spell> spellsEnCours) {
this.spellsEnCours = spellsEnCours;
...
}
public Sequence(Sequence pSequence) {
this.spells = pSequence.spells;
...
}
}
私のコードにはどこでも静的フィールドはありません。 (例えば)
私の主な治療:
...
ArrayList<Spell> mySpells = new ArrayList<Spell>();
Spell spell1 = new Spell(150, 0, 0, "Spell 1", null);
Spell spell2 = new Spell(200, 2, 0, "Spell 2", new Buff(TypeBuff.ALLY_ATK, 2));
Spell spell3 = new Spell(500, 3, 0, "Spell 3", null);
mySpells.add(spell1);
mySpells.add(spell2);
mySpells.add(spell3);
ArrayList<Sequence> mySequences = new ArrayList<Sequence>();
Sequence initialSequence = new Sequence(mySpells);
Sequence secondSequence = new Sequence(initialSequence);
mySequences.add(initialSequence);
// Let's just consider this call set a Spell's class attribute to true/false in the list Attribute of Spell
secondSequence.choisirSpell(spell3);
mySequences.add(secondSequence);
や呪文の状態私のinitialSequence属性では、私の方法choisirSpellのコールの後、私のsecondSequenceと同じになります。それは同じインスタンスのように、どちらかのHashCodeが異なっています。
私が望むのは、これら2つのオブジェクトの呪文属性は、とにかく独立していないということです。
なぜなら、両方ともList 'mySpells'と同じ参照を使用しているからです。解決策は、空のListで2番目のSequenceを初期化し、 'secondSequence.spells.addAll(mySpells)'を呼び出すことです。 EDIT:2番目のコンストラクタを単に次のように置き換えることができます: 'this.spells = new ArrayList <>(); this.spells.addAll(pSequence.spells); ' – schrobe
' this.spells = pSequence.spells; '' spells'は 'pSequence.spells'と同じインスタンスです。 'this.spells = new ArrayList <>(pSequence.spells);' –