23

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

4

1 に答える 1

24

合成フィールドは、ローカル内部クラスをブロックのローカル変数または参照型パラメーターにリンクする、コンパイラによって作成されたフィールドです。コンパイラは、名前のスコープを実装するために、特定の隠しフィールドとメソッドを合成します。これらのフィールドは、特に明記されていない限り非公開であるか、ほとんどがパッケージ スコープです。詳細については、こちらJLSをご覧ください。

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

于 2013-06-12T18:41:24.680 に答える