1. ホーム

[解決済み】なぜJava Genericsはプリミティブ型をサポートしないのですか?

2022-04-04 07:56:21

質問

なぜJavaのジェネリックは、クラスでは使えるのに、プリミティブ型では使えないのですか?

例えば、こんな感じで問題なく動作します。

List<Integer> foo = new ArrayList<Integer>();

が、これは許されない。

List<int> bar = new ArrayList<int>();

解決方法は?

Javaにおけるジェネリックは、完全にコンパイル時の構造です。コンパイラは、すべてのジェネリックの使用を正しい型へのキャストに変更します。これは、以前のJVMランタイムとの後方互換性を維持するためです。

これは

List<ClassA> list = new ArrayList<ClassA>();
list.add(new ClassA());
ClassA a = list.get(0);

に変わる(大雑把)。

List list = new ArrayList();
list.add(new ClassA());
ClassA a = (ClassA)list.get(0);

したがって、ジェネリックスとして使用されるものは、Objectに変換可能でなければなりません(この例では get(0)Object )であり、プリミティブ型はそうではありません。だから、ジェネリックでは使えない。