generics に関する配列とリストの違い(2/3)−実行時の型チェック
配列と generic なリストでは、実行時の型チェックについて以下の違いがあります。
- 配列は、実行時に型チェックを行える。
- リストは、実行時に型チェックを行えない。
どういうことなのか、以下で説明します。
配列の場合
配列は、コンパイル時には型チェックを行いませんが、一方で実行時に型チェックを行う仕様になっています。
コードで具体的に見てみましょう。
// 配列は covariant なので、このような定義は可能。 Object[] array = new Integer[2]; array[0] = 1; // コンパイル時にはエラーにならないが、実行時に ArrayStoreException が発生する。 array[1] = "2";
言い換えると、実行するまで型エラーを検知できないという問題があるわけです。
(これが、generics の策定につながっていくわけです。)