[解決済み】なぜ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
)であり、プリミティブ型はそうではありません。だから、ジェネリックでは使えない。
関連
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?Java のジェネリックはなぜ暗黙のうちに多相性にならないのですか?
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み] Integerを含むArrayListをprimitive int配列に変換する方法は?
-
[解決済み] なぜ、Javaではいまだにプリミティブ型が使われているのでしょうか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] java.lang.IncompatibleClassChangeError: Mongo クラスを実装しています。
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。