• ベストアンサー

ArrayListからBean配列に値をセットするには?

お世話になっています。 今うまくいかずに困っていることがありまして、 ご存知の方がいらっしゃいましたら、 ご回答いただけないでしょうか? 質問の内容は以下の通りです。 ArrayListにセットされているデータを Bean配列にセットするにはどのようにしたら よいのでしょうか? 自分では以下のようにしているのですが、 デバッグすると落ちてしまいます。 // Bean配列の生成 Bean[] bean = new Bean[arrayListList.size()]; // Iteratorにより要素を取得する Iterator it = dataList.iterator(); // ヘッダー情報Bean配列の行番号 int i = 0; // ArrayListのi行目のデータをBeanにキャストし、 // i行目のBean配列にセットする while(it.hasNext()){ bean[i] = (Bean) dataList.get(i); i++; } ちなみに、キャストしようとしているBeanには int型の項目があるんですが、そういうのが原因で 落ちるのでしょうか? ご存知の方がいらっしゃいましたら、ご教授ください。

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

  • ベストアンサー
回答No.1

こんにちは。 「落ちます」の表現は、他人にはわかりません。 例外が発生しているのであれば、その例外を特定して、情報として掲載してください。 Bean[] bean = new Bean[arrayListList.size()]; と、配列生成時は、arrayListListを利用し、そのあとは、dataListを利用しているのが、すごく気になります。これが原因ではないでしょうか? それとも、dataListの要素として設定されている値が、Beanクラスオブジェクトではないのが原因だったりしませんでしょうか? いずれにしても、どう「落ちている」のか、精確に書いていただかないと、、、です。 これは、直接的な話ではありませんが、コーディングに無駄を感じます。 while文でループする度に1増加する変数iを利用しているのならば、Iteratorを使わずに、 for (int i=0; i < dataList.size(); i++) {  bean[i] = (Bean) dataList.get(i); } とした方が、コーディング量が減ります。 また、Listから配列へはtoArrayメソッドを使うともっとコーディング量が減ります。 Bean[] bean = new Bean[dataList.size()]; dataList.toArray(bean); と言った感じでどうでしょう。

mi-mitsu
質問者

補足

早速のご回答ありがとうございます。 >「落ちます」の表現は、他人にはわかりません。 >例外が発生しているのであれば、その例外を特定し >て、情報として掲載してください。 すみません。確かにおっしゃる通りですね。今後、 気をつけます。 >Bean[] bean = new Bean[arrayListList.size()]; >と、配列生成時は、arrayListListを利用し、そのあと>は、dataListを利用しているのが、すごく気になりま >す。これが原因ではないでしょうか? 度々すみません。誤植です。arrayListListと dataListは同じものとみなしてください。 >いずれにしても、どう「落ちている」のか、精確に >書いていただかないと、、、です。 そうですね。失礼しました。実際のところは、 デバッグ中にExceptionが発生してしまいます。 どのExceptionかは忘れてしまい、しかも今は 確認できませんので、情報として掲載できません。 ごめんなさい。 >それとも、dataListの要素として設定されている値 >が、Beanクラスオブジェクトではないのが原因だった >りしませんでしょうか? う~ん、どういうことですか?知識が全然足りない もので、おっしゃっていることが理解できないのです けれど、dataListにセットしている値を、Beanに セットするときに、Beanの項目にint型やdouble型の ものがあるとダメということですか?よろしかったら ご教授いただけませんでしょうか? ソースについてもいろいろと適切なアドバイスを 頂まして、ホントにありがとうございます。

その他の回答 (1)

  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.2

 こんにちは。 while(it.hasNext()){   bean[i] = (Bean) dataList.get(i);   i++; }  ここのwhile文ですが、無限ループになってしまっていますよ。  Iteratorを使うのでしたら、ちゃんとnext()メソッドで要素を取得しないと、hasNext()はいつまでたってもtrueを返します。  出た例外もIndexOutOfBoundsExceptionだったはずです。  Iteratorを使うのでしたら、こう↓ while (it.hasNext()) {   bean[i] = (Bean)it.next(); }  使わないのであれば、#1さんの言うとおり、 for (int i=0; i < dataList.size(); i++) {   bean[i] = (Bean) dataList.get(i); }  こうすべきです。

mi-mitsu
質問者

お礼

ご回答ありがとうございます。 言われてみれば、確かに無限ループになりますね。 全くもって気づきませんでした。 いろいろとご指導いただきありがとうございました。 これで解決できそうです。ホントに心から感謝 いたします。

関連するQ&A