2013-06-12 24 views
14

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

+0

http://stackoverflow.com/questions/5223268/what-is-the-meaning-of-static-syntheticおよびhttp://stackoverflow.com/questions/7767804/synthetic-back-in-an-inner-class – assylias

答えて

15

合成フィールドは、ローカル内部クラスをブロックのローカル変数または参照型パラメータにリンクするコンパイラ作成フィールドです。コンパイラは、名前のスコープを実装するために、特定の隠しフィールドとメソッドを合成します。これらのフィールドは、特に明記されていない限り、非公開です。あなたはより多くの情報hereを得ることができますし、JLS

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

+0

"合成フィールドは、ローカル内部クラスをブロックのローカル変数または参照型パラメータにリンクするコンパイラ作成フィールドです"...私はこの行の意味を理解していない。コード例が役に立ちます。 – Geek

+1

コード例は、この[blog](http://javapapers.com/core-java/java-synthetic-class-method-field/)を参照してください。 – NINCOMPOOP

+0

フィールド上での反射を通してクローニングを作成している場合、それらを正しくスキップする必要がありますか? –

関連する問題