[解決済み] C#とJavaのジェネリックス(重複)
2022-07-10 05:48:48
質問
GenericsのJava実装はC#実装に比べ、あまり良くないと聞いたことがあります。構文が似ているという点で、Javaの実装のどこが規格外なのか、それとも宗教的な観点なのでしょうか?
どのように解決するのですか?
ストレロクシのリンク には、その違いを説明する素晴らしい仕事があります。 しかし、簡単で汚い要約は...
構文と使用法に関して。 構文は言語間でほぼ同じです。 いくつかの癖があちこちにあります (最も顕著なのは制約です)。 しかし、基本的には、一方を読むことができれば、もう一方を読んだり使ったりできる可能性が高いです。
しかし、最大の違いは実装にあります。
Javaはジェネリックを実装するために型消去の概念を使用します。 要するに、基礎となるコンパイルされたクラスは実際にはジェネリックではありません。 それらはオブジェクトとキャストにコンパイルされます。 事実上、Java のジェネリックスはコンパイル時の成果物であり、実行時に簡単に覆すことができます。
一方、C# は、CLR のおかげで、バイト コードに至るまでジェネリクスを実装しています。 CLR は、2.0 でジェネリックスをサポートするためにいくつかの破壊的な変更を行いました。 その利点は、パフォーマンスの向上、深い型安全性の検証、およびリフレクションです。
再び、提供された リンク には、より詳細な内訳が記載されていますので、ぜひご一読ください。
関連
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] HashMapを直接(リテラルに)初期化する方法は?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] 関数を終了するには?
-
[解決済み】C#やJavaのGenericsと...C++のTemplatesの違いは?[終了しました]