web-dev-qa-db-ja.com

Javaの合成フィールドとは何ですか?

誰かがJavaの合成フィールドの重要性を理解しやすい方法で説明できますか?そのような各内部クラスインスタンスがそれを囲むクラスへの参照を維持する非静的内部クラスのコンテキストでそれを読んだことを思い出します。なぜそのような参照/フィールドは合成フィールドと呼ばれるのですか?

18
Geek

合成フィールドは、ローカル内部クラスをブロックのローカル変数または参照型パラメーターにリンクするコンパイラー作成のフィールドです。コンパイラーは、名前のスコープを実装するために、特定の非表示フィールドとメソッドを合成します。これらのフィールドは、特に明記されていない限りプライベートであるか、せいぜいパッケージスコープです。あなたはより多くの情報を得ることができます ここ そして [〜#〜] jls [〜#〜]

ソースコードに表示されないクラスメンバーは、Synthetic属性を使用してマークする必要があります。そうでない場合は、ACC_SYNTHETICフラグを設定する必要があります。この要件の唯一の例外は、実装アーティファクトとは見なされないコンパイラ生成メソッドです。つまり、Javaプログラミング言語(§2.9)のデフォルトコンストラクタを表すインスタンス初期化メソッド、クラス初期化メソッドです。 (§2.9)、およびEnum.values()メソッドとEnum.valueOf()メソッド。

18
NINCOMPOOP