- ベストアンサー
Java Generics の Enhhanced for-loop のメリットとは?
- JavaのGenericsを使用すると、プログラム・コーディングを簡略化できるメリットがあります。
- Enhhanced for-loopは要素の繰り返し処理を簡潔に記述することができるため、コーディングの効率性が向上します。
- しかし、Enhhanced for-loopは途中で処理を止めることができないため、要件に合わない場合は他の方法を検討する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> loopが始まると途中で止められない? これがどこから来たのか分かりませんが、止まるときゃ止まります(^^; ・Generics この前提には「従来のJavaのCollectionフレームワークは型に対して安全ではない」というものがあります。 CollectionフレームワークはListやMapのことです。詳しい説明は省きます。 これらは全クラスの親クラスであるObjectを扱うの為に中に何が入っているかが保障しにくく、 クラスのキャストに関する問題(参考URL参照)が起きやすくなっています。 そこで、「このListにはStringだけ扱うよ」などと宣言できるようにしたものがGenericsです。 Genericsを使っただけのサンプルを見ると、コード量が増えているように感じますが、Genericsの利点は2つです。 1.おかしな値を入れようとすると、コンパイルの時点でエラーになる 2.取り出すときにキャストが不要 特に重要なのは1つ目で、明らかに動かないコードがコンパイルされるのを防ぐことができます。 この利点は参考サイトのサンプルよりも、Listを引数でもらう場合、 Listをメソッドの戻りとして受け取る場合等を想定してみると分かりやすいです。 instanceofを使って引数のListの中身を毎回チェックするより、 hoge(List<String > strList)と宣言する方が簡単で間違いがすぐ分かります。 → 本来記述しようとしている処理とは無関係なチェックコード、エラーハンドリングの削減 また、コンパイルでエラーになるので、変なものを渡していないか? というテストとその手戻りを削減できます。 → テスト、およびその手戻りにかかるコストの軽減 ・Enhhanced for-loop ループのときのお決まり処理を書かずにすみます。 コード量が減る+見やすくなる という直接の効果のほか、 Iteratorの変数名で悩まずにすむ などの効果が期待できます:-P あと、Genericsと「Enhhanced for-loopの場合」はあわせて説明しない方がいいと思います。 上記の説明にあるように、Genericsの利点はEnhhanced for-loopとはほぼ無関係なので混乱するでしょう。 もしあわせて説明するのであれば、Genericsによるコードの変更→Enhhanced for-loopによるコードの削減 というように、順を追って説明しましょう。順番は逆でもいいですが、両方適用した物をいきなり見せるのは避けた方がいいです。 私は、説明するときは「引数で受け取ったListをfor文で処理する」を使うことが多いです。