2

私は Java の一般的な概念について多くのことを読みました。私はすでにいくつかの疑問を抱いていましたが、StackOverflowに関する正確な回答でクリアされました。

この質問はここで以前に尋ねられたことはないと思います。
いろいろ探しました。しかし、この質問に対する答えはどこにも見つかりませんでした。


(a ) コンパイル時
(b) ランタイム実行 時に、汎用プログラム (Java) で何がどのように発生するか。

のように....
段階的に何が起こるのですか?
コンパイラが一般的な情報などを格納する場所...

誰かがサンプルコードで私を説明できますか?

ありがとう。

編集:すべての一般的な情報を削除する型消去のような概念は知っていますが、一般的なプログラムのすべての手順を知りません。

4

2 に答える 2

4

ジェネリックについての Angelika Langer FAQを読むと、すべての質問に対する回答が見つかる可能性が高くなります。

The Java Programming Language 4th Editionという本には、このテーマに関する優れた章が含まれています。

そしてもちろん、無料で入手できるJava 言語仕様ほど優れたリファレンスはありません。

Java Generics and Collectionsも、本当に深く掘り下げたい場合は、このテーマに関する非常に優れた本です。この本の PDF 版を見つけましたここ. 残念ながら数ページしかありません。

于 2011-04-19T03:52:55.937 に答える
0

.Net と Java を使用している場合は、http://jorudolph.wordpress.com/2010/04/21/net-generics-implementation/で比較対照ビューが提供されます。

http://www.codeproject.com/KB/java/GenericsInJavaPartII.aspxは、実装の意味を示すサンプル コードによる説明です。

ざっくり言うと……。

パート A:

コンパイラは汎用ビットを一掃 (「消去」) します (したがって、ArrayList は ArrayList に変わります)。次に、オブジェクトがコレクションから取り出されると (al.get(0) など)、コンパイラはデータ型を変換するコード (別名「ボクシング」) を挿入します (al.get(0) を (StackExchange) に変換します)。 al.get(0))。

パート B:

パートBはありません:)

パート Z:

Java のジェネリックは、言語が最初にリリースされてから約 10 年後に実装されました。その結果、おそらく下位互換性という名目で、Java のジェネリックはシンタックス シュガーとしてのみ機能します。シンタックス シュガーは、「このコードは自分で書くこともできますが、コンパイラでは代わりにショートカットを入力できるようにする」という手の込んだ言い方です。たとえば、ジェネリックが Java に登場する前に、(StackExchange)al.get(0) を記述できました。ジェネリックを使用する場合、コンパイラはコードを挿入するだけです。

于 2011-04-19T03:51:32.323 に答える