Javaはなぜ汎用配列をサポートしないのか
1912 ワード
の原因となる
以前leetcodeが問題をブラシしたとき、ある問題が
ぶんせき
まずJava配列の場合、配列は内部要素のタイプを明確に知らなければならない.また、コンパイラは「このタイプは、配列に新しい要素を挿入するたびにタイプチェックを行い、不一致は
汎用配列を作成しようとすると、次のように直接書きます.
実はコンパイルできません.なぜならJavaの汎用型はタイプ消去(type erasure)によって実現されるからである.タイプ消去とは、簡単に言えばJavaはコンパイル中にすべての汎用情報が消去されます.
コードに定義されている
以前leetcodeが問題をブラシしたとき、ある問題が
HashMap
の配列を新築しようとしたが、いつもコンパイルが間違っていて、Javaでは通常の基本タイプの配列のように、直接汎用配列を新築することはできないことに突然反応した.その理由を比較的簡単明瞭に説明してほしい.ぶんせき
まずJava配列の場合、配列は内部要素のタイプを明確に知らなければならない.また、コンパイラは「このタイプは、配列に新しい要素を挿入するたびにタイプチェックを行い、不一致は
java.lang.ArrayStoreException
エラーを投げ出す」ことを覚えている.汎用配列を作成しようとすると、次のように直接書きます.
HashMap map = new HashMap[];
実はコンパイルできません.なぜならJavaの汎用型はタイプ消去(type erasure)によって実現されるからである.タイプ消去とは、簡単に言えばJavaはコンパイル中にすべての汎用情報が消去されます.
コードに定義されている
List