[解決済み] なぜJava CollectionsはPrimitives型を直接格納できないのですか?
質問
Javaコレクションはオブジェクトのみを格納し、プリミティブ型は格納しませんが、ラッパークラスは格納できます。
なぜこの制約があるのでしょうか?
どのように解決するのか?
これはJavaの設計上の決定であり、いくつかの人が間違いだと考えているものです。コンテナはオブジェクトを必要とし、プリミティブはオブジェクトから派生しないのです。
これは、.NET 設計者が JVM から学び、多くのケースでボクシングが排除されるように値型とジェネリックスを実装した 1 つの場所です。CLR では、ジェネリック コンテナーは基礎となるコンテナー構造の一部として値型を格納することができます。
Java は、JVM からのサポートなしに、コンパイラーで 100%ジェネリック サポートを追加することを選択しました。JVMはそれが何であるかであるため、quot;non-object"オブジェクトをサポートしません。Javaジェネリックを使えば、ラッパーがないように見せかけることができますが、箱詰めすることによるパフォーマンスの代償はまだ残っています。これは、特定のクラスのプログラムにとって重要なことです。
ボクシングは技術的な妥協点であり、実装の詳細が言語に漏れていると感じています。Autoboxing は素晴らしい構文上の糖分ですが、それでもパフォーマンス上のペナルティがあります。どちらかといえば、オートボックスするときにコンパイラーが警告してくれることを望みます。(私が知っている限り、今はそうかもしれませんが、私はこの答えを2010年に書きました)。
SOでのボクシングに関する良い説明です。 なぜいくつかの言語ではBoxingとUnboxingが必要なのでしょうか?
Javaジェネリクスへの批判も。 なぜJavaのジェネリックの実装が悪いと主張する人がいるのでしょうか?
Javaの弁護をすると、後ろを振り返って批判するのは簡単です。JVMは時の試練に耐えており、多くの点で良い設計になっています。
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
自動配線された依存性のインジェクションに失敗しました。
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] HashMapを直接(リテラルに)初期化する方法は?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException を解決するには?
-
[解決済み] なぜJavaにはSortedListがないのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
javaで非静的な解を静的な参照にすることができない
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
org.glassfish.jersey.servlet.ServletContainer
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
JSPで「リストが型解決できない!」の解決方法
-
IDEA パッケージステートメントの欠落
-
このラインで複数のマーカーを解決する方法
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策