2013-06-12 11 views
14

Czy ktoś może wyjaśnić w prosty sposób znaczenie pól syntetycznych w Javie. Przypominam, że czytałem to w kontekście niestatycznych klas wewnętrznych, gdzie każda taka instancja klasy wewnętrznej utrzymuje odniesienie do klasy otaczającej. Dlaczego takie odniesienia/pola nazywane są polami syntetycznymi?Co to są pola syntetyczne w Javie?

+0

http://stackoverflow.com/questions/5223268/what-is-theing-of-static-synthetic i http://stackoverflow.com/questions/7767804/what-is-a-synthetic-back-reference-to-an-class-class – assylias

Odpowiedz

15

Pole syntetyczne jest polem utworzonym przez kompilator, które łączy lokalną klasę wewnętrzną z lokalną zmienną bloku lub parametrem typu odniesienia. Kompilator syntetyzuje określone ukryte pola i metody w celu implementacji zakresu nazw. Te pola są prywatne, o ile nie zaznaczono inaczej, lub są one co najwyżej zakresu pakietu. Możesz uzyskać więcej informacji here aw JLS

członek klasy, która nie pojawia się w kodzie źródłowym muszą być oznaczone za pomocą atrybutu syntetyczny, albo musi mieć swój ACC_SYNTHETIC flagę. Jedynymi wyjątkami od tego wymagania są generowane przez kompilator metody, które nie są uznawane za artefakty implementacji, a mianowicie metoda inicjowania instancji reprezentująca domyślny konstruktor języka programowania Java (§2.9), metoda inicjowania klasy (§2.9) i Enum. wartości() i metody Enum.valueOf() ..

+0

"Pole syntetyczne jest polem utworzonym przez kompilator, które łączy lokalną klasę wewnętrzną z lokalną zmienną bloku lub parametrem typu odniesienia "... Nie rozumiem znaczenia tej linii. Pomocny mógłby być przykład kodu. – Geek

+1

Możesz zajrzeć do tego [blog] (http://javapapers.com/core-java/java-synthetic-class-method-field/) dla przykładu kodu. – NINCOMPOOP

+0

więc jeśli utworzę klonowanie poprzez odbicie nad polami, muszę je pominąć? –