2013-06-12 70 views
14

有人可以用簡單易懂的方式解釋合成域在Java中的重要性。我記得在非靜態內部類的上下文中閱讀它,每個這樣的內部類實例維護對封閉類的引用。爲什麼這些引用/字段稱爲合成字段?Java中的合成字段是什麼?

+0

http://stackoverflow.com/questions/5223268/what-is-the-meaning-of-static-synthetic和http://stackoverflow.com/questions/7767804 /什麼是合成後面引用內部類 – assylias

回答

15

合成字段是編譯器創建的字段,它將本地內部類與塊的局部變量或引用類型參數鏈接起來。編譯器合成某些隱藏的字段和方法以實現名稱範圍。除非另有說明,否則這些字段是私人的,或者它們至多是包裝範圍。你可以得到更多的信息hereJLS

沒有出現在源代碼中的類成員必須使用合成屬性標記,否則就必須有ACC_SYNTHETIC標誌設置。這個需求的唯一例外是編譯器生成的方法,它們不被視爲實現工件,即表示Java編程語言(§2.9)的缺省構造函數的實例初始化方法,類初始化方法(§2.9)和Enum。值()和Enum.valueOf()方法..

+0

「合成域是編譯器創建的域,它將本地內部類與塊的局部變量或引用類型參數「......我不明白這條線的意思。一個代碼示例會有所幫助。 – Geek

+1

您可以查看此代碼示例的[blog](http://javapapers.com/core-java/java-synthetic-class-method-field/)。 – NINCOMPOOP

+0

所以如果我通過反射來創建克隆,我必須跳過它們嗎? –