2013-06-12 8 views
14

Kann jemand die Bedeutung synthetischer Felder in Java leicht verständlich erklären? Ich erinnere mich, es im Zusammenhang mit nicht statischen inneren Klassen gelesen zu haben, wo jede solche innere Klasseninstanz einen Verweis auf die einschließende Klasse enthält. Warum werden solche Referenzen/Felder synthetische Felder genannt?Was sind synthetische Felder in Java?

+0

http://stackoverflow.com/questions/5223268/what-is-the-meaning-of-static-synthetic und http://stackoverflow.com/questions/7767804/what-is-a-synthetic-back-reference-to-a-inner-class – assylias

Antwort

15

Ein synthetisches Feld ist ein vom Compiler erstelltes Feld, das eine lokale innere Klasse mit den lokalen Variablen oder Referenztyp-Parametern eines Blocks verknüpft. Der Compiler synthetisiert bestimmte versteckte Felder und Methoden, um das Scoping von Namen zu implementieren. Diese Felder sind privat, sofern nicht anders angegeben, oder sie sind höchstens im Paketumfang. Sie können mehr Informationen here und in JLS

Eine Klasse Mitglied erhalten, die nicht im Quelltext angezeigt werden muss mit einem synthetischen Attribute gekennzeichnet sein, sonst muss sie ihre ACC_SYNTHETIC-Flag gesetzt haben. Die einzigen Ausnahmen von dieser Anforderung sind vom Compiler generierte Methoden, die nicht als Implementierungsartefakte betrachtet werden, nämlich die Instanzinitialisierungsmethode, die einen Standardkonstruktor der Programmiersprache Java (§2.9), die Klasseninitialisierungsmethode (§2.9) und die Enum darstellt. Werte() und Enum.valueOf() Methoden ..

+0

"Ein synthetisches Feld ist ein vom Compiler erstelltes Feld, das eine lokale innere Klasse mit der lokalen Variablen oder dem Referenztyp eines Blocks verknüpft "... Ich verstehe die Bedeutung dieser Zeile nicht. Ein Codebeispiel würde helfen. – Geek

+1

Sie können dies [Blog] (http://javapapers.com/core-java/java-synthetic-class-method-field/) für Codebeispiel ansehen. – NINCOMPOOP

+0

also, wenn ich ein Klonen durch Reflexion über Felder erstellen, muss ich sie richtig überspringen? –