配列の作成はコンパイル時に行われますか?
List<String>[] strings = new List[9];
List が単なるインターフェースであっても機能するため、配列の作成は型消去の前に行われると思います。そのため、以下は機能しません。
List<String>[] strings = new List<String>[9];
配列自体の作成が型消去権の前に行われるという事実によるものですか?
配列は、型の消去後に実行時に作成されます。newarray
バイトコード命令は、配列を作成するために予約されています。
Java の配列は具象オブジェクトではなくオブジェクト参照のみを保持するため、インターフェイスと抽象クラスの配列を作成できます。配列を満たすインスタンスは作成されません。
パラメータ化された型の配列を作成できない理由については、チュートリアル で説明されているように、配列がタイプセーフではないためです。
JLSによると-
Java プログラミング言語では、配列はオブジェクト (§4.3.1) であり、動的に作成され、Object 型の変数に割り当てることができます (§4.3.2)。
new PrimitiveType DimExprs Dimsopt
new ClassOrInterfaceType DimExprs Dimsopt
new PrimitiveType Dims ArrayInitializer
new ClassOrInterfaceType Dims ArrayInitializer
配列は実行時に作成されます。を含む配列を作成しているだけList<String>
で、実際のオブジェクトはList<String>
作成されていません。したがって、それは完全に有効です。
配列作成式の実行時評価 JLS配列作成式は実行時に評価されます。