Что такое синтетические поля в Java?
Может ли кто-то объяснить в понятной форме важность синтетических полей в Java. Я вспоминаю, что читал его в контексте нестатических внутренних классов, где каждый такой экземпляр внутреннего класса поддерживает ссылку на включающий класс. Почему такие ссылки / поля называются синтетическими полями?
1 ответ
Синтетическое поле - это поле, созданное компилятором, которое связывает локальный внутренний класс с локальной переменной блока или параметром ссылочного типа. Компилятор синтезирует определенные скрытые поля и методы, чтобы реализовать определение имен. Эти поля являются частными, если не указано иное, или они находятся в большей части области действия пакета. Вы можете получить больше информации здесь и в JLS
Член класса, который не отображается в исходном коде, должен быть помечен с использованием атрибута Synthetic, иначе у него должен быть установлен флаг ACC_SYNTHETIC. Единственными исключениями из этого требования являются методы, сгенерированные компилятором, которые не считаются артефактами реализации, а именно метод инициализации экземпляра, представляющий конструктор по умолчанию языка программирования Java (§2.9), метод инициализации класса (§2.9) и Enum. значения () и методы Enum.valueOf().