• ベストアンサー

クラス型配列のコピー

いつもお世話になっています。 クラス型配列のコピーについてなのですが、 普通の配列だと //コピー元配列 String[] str1 = {"str1","str2","str3" }; //コピー先配列 String[] str2 = new String[2]; //指定分だけ、配列内データをコピー System.arraycopy(str1,0,str2,0,2); //表示 for(int s=0;s<2;s++ ) { System.out.println(str2[s]); } といった形式で、コピーできますが、 これがクラス型の場合可能でしょうか? サンプル例として、 public class SampleFormBean { private String sampleName; private int number; public void setSampleName(String sampleName) { this.sampleName = sampleName; } public String getSampleName() { return sampleName; } public void setNumber(int number) { this.number = number; } public int getNumber() { return number; } } というクラスがあった場合で、 実行するソースは、 //SampleFormBeanクラス型配列 SampleFormBean [] sampleS = SampleFormBean Sample[3]; //SampleFormBeanクラスインスタンスの生成 SampleFormBean sample = new SampleFormBean (); //データの設定 sample.setSampleName("test1"); sample.setNumber(0); sampleS[0] = sample; sample.setSampleName("test2"); sample.setNumber(1); sampleS[1] = sample; sample.setSampleName("test3"); sample.setNumber(2); sampleS[2] = sample; という感じになります。 また、for()なら、ディープコピーとして可能ですが、 これ以外に何か手段はあったりするのでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kana_m
  • ベストアンサー率40% (26/65)
回答No.2

Objectクラスにcloneメソッドという、 シャローコピーしてくれる便利なものがありますよ。 配列は当然Objectクラスですのでこれを使えます。 でも、サンプルを見た感じWebシステムで使うっぽいので 大人しくミューテータ付けてディープコピーした方が良い気がします。 ApacheがCommons BeanUtilsという便利なものも提供してますし そちらも利用してみては。

kannitiha
質問者

お礼

回答ありがとうございます。 >でも、サンプルを見た感じWebシステムで使うっぽいので 大人しくミューテータ付けてディープコピーした方が良い気がします。 ディープコピーで対処するようにします。 >ApacheがCommons BeanUtilsという便利なものも提供してますし こんなのもあったんですね。 参考にさせていただきます。 ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

? String ってクラス型だよね? つまり, 「普通の配列なら」として String[] を使ってるけど, 実はこれは「クラス型の配列」ではないのか?

kannitiha
質問者

お礼

ありがとうございます。 ちょっと勘違いをしてたみたいです。 ありがとうございました。