と私は私のコピーコンストラクタJavaのクローン()配列
protected int forca;
protected Spell []feitico;
public Picareta(final Picareta rValue)
{
super((Ferramenta)rValue);
this.forca=rValue.forca;
this.feitico=rValue.feitico.clone();
}
でこれをしようとしてではなく、配列
内のオブジェクトを複製するのと同じ参照をfeitico持っています私は本当にすべての要素のクローンを作成する必要があります配列内にあるか、またはSpellの私のクローン()が間違っていますか?
public Spell clone() throws CloneNotSupportedException
{
super.clone();
Spell temp= new Spell(this);
return temp;
}
またはこれは最良の(コンパクトな)方法ですか?
public Picareta(final Picareta rValue)
{
super((Ferramenta)rValue);
this.forca=rValue.forca;
this.feitico=new Spell[rValue.feitico.length];
for (int i=0;i<rValue.feitico.length;i++)
this.feitico[i]=new Spell(rValue.feitico[i]);
}
はい、実際には配列内のすべての要素をコピーする必要があります。 –
次に、array.clone()は、本体またはコピーコンストラクタ内でも自分のclone()メソッドを使用するはずですが、clone()メソッドは配列プリミティブとしてのみ有効です。 –
かなりそうです。 'clone()'はまったく役に立ちます。 (一般的に、ベストプラクティスはほとんどすべてを不変にすることですが、その場合はコピーする必要はありません。) –