Spec-Zone.ru › OpenJDK 25

Пакет javax.lang.model.element

package javax.lang.model.element
Интерфейсы, используемые для моделирования элементов языка программирования Java. Термин «элемент» в этом пакете используется для обозначения программных элементов — объявленных сущностей, из которых состоит программа. К элементам относятся классы, интерфейсы, методы, конструкторы и поля. Интерфейсы в этом пакете не моделируют структуру программы внутри тела метода; например, представление цикла for или блока try-finally отсутствует. В частности, не моделируется какая-либо структура абстрактного синтаксического дерева (AST) программы на Java. Однако интерфейсы могут моделировать некоторые структуры, встречающиеся только внутри тел методов, такие как локальные переменные, анонимные классы и параметры исключений. Поэтому эти интерфейсы могут использоваться API для работы с AST при моделировании объявлений, найденных в телах методов единиц компиляции Java (JLS 7.3).

При использовании в контексте обработки аннотаций необходимо возвращать точную модель представляемого элемента. Поскольку это языковая модель, исходный код служит эталонным (опорным) представлением рассматриваемой конструкции, а не представлением в исполняемом выходном файле, например файле класса. Исполняемый выходной файл может служить основой для создания элемента модели. Однако процесс преобразования исходного кода в исполняемый выходной файл может не позволить восстановить некоторые аспекты представления исходного кода. Например, аннотации с исходной политикой хранения невозможно восстановить из файлов классов, а файлы классов могут не содержать сведений о позициях в исходном коде. Имена параметров могут быть невосстановимы из файлов классов. Модификаторы элемента, созданного на основе файла класса, в некоторых случаях могут отличаться от модификаторов элемента того же объявления, созданного на основе исходного файла, в том числе:

  • strictfp у класса или интерфейса
  • final у параметра
  • protected, private и static у классов и интерфейсов
Некоторые элементы, которые являются обязательными, при создании на основе файлов классов могут не помечаться соответствующим образом. Кроме того, синтетические конструкции в файле класса, например методы доступа, используемые при реализации вложенных классов, и мостовые методы, используемые при реализации ковариантных возвращаемых типов, являются артефактами преобразования и строго не входят в эту модель. Однако при работе с файлами классов полезно иметь возможность работать с такими элементами, отфильтровывая их при необходимости.

Во время обработки аннотаций необходимо работать с неполными или содержащими ошибки программами; однако в отношении характера получаемой модели существует меньше гарантий. Если исходный код синтаксически некорректен или содержит другую неисправимую ошибку, которую нельзя устранить генерацией новых классов или интерфейсов, предоставление модели может зависеть от качества реализации. Если программа класса или интерфейса синтаксически корректна, но содержит ошибку иного рода, возвращаемая модель должна содержать не меньше информации, чем модель, полученная при замене всех тел методов в программе на "throw new RuntimeException();". Если программа ссылается на отсутствующий класс или интерфейс Xyz, возвращаемая модель должна содержать не меньше информации, чем модель, полученная при предположении, что объявление класса или интерфейса Xyz имеет вид "class Xyz {}", "interface Xyz {}", "enum Xyz {}", "@interface Xyz {}" или "record Xyz {}". Если программа ссылается на отсутствующий класс или интерфейс Xyz<K1, ... ,Kn>, возвращаемая модель должна содержать не меньше информации, чем модель, полученная при предположении, что объявление Xyz имеет вид "class Xyz<T1, ... ,Tn> {}" или "interface Xyz<T1, ... ,Tn> {}"

Если для конкретной реализации не указано иное, следует считать, что коллекции, возвращаемые методами этого пакета, не могут быть изменены вызывающим кодом и небезопасны для параллельного доступа.

Если не указано иное, методы этого пакета выбрасывают NullPointerException при получении аргумента null.

См. Спецификацию языка Java:
6.1 Объявления
7.4 Объявления пакетов
7.7 Объявления модулей
8.1 Объявления классов
8.3 Объявления полей
8.4 Объявления методов
8.5 Объявления вложенных классов и интерфейсов-членов
8.8 Объявления конструкторов
9.1 Объявления интерфейсов
Начиная с:
1.6
См. также:
  • Elements
  • Элементы и типы
  • JSR 269: Подключаемый API обработки аннотаций
Пакет Описание
javax.lang.model
Типы и иерархии пакетов, составляющих языковую модель Java, — рефлексивный API, моделирующий объявления и типы языка программирования Java.
javax.lang.model.type
Интерфейсы, используемые для моделирования типов языка программирования Java.
javax.lang.model.util
Вспомогательные средства для обработки программных элементов и типов.
Класс Описание
AnnotationMirror
Представляет аннотацию.
AnnotationValue
Представляет значение элемента интерфейса аннотации.
AnnotationValueVisitor<R,P>
Посетитель значений элементов интерфейсов аннотаций, использующий вариант шаблона проектирования «Посетитель».
Element
Представляет программный элемент, например модуль, пакет, класс или метод.
ElementKind
kind элемента.
ElementVisitor<R,P>
Посетитель программных элементов, реализованный в стиле шаблона проектирования «Посетитель».
ExecutableElement
Представляет метод, конструктор или инициализатор (статический или экземпляра) класса или интерфейса, включая элементы интерфейсов аннотаций.
Modifier
Представляет модификатор программного элемента, например класса, метода или поля.
ModuleElement
Представляет программный элемент-модуль.
ModuleElement.Directive
Представляет директиву в объявлении этого модуля.
ModuleElement.DirectiveKind
kind директивы.
ModuleElement.DirectiveVisitor<R,P>
Посетитель директив модулей, реализованный в стиле шаблона проектирования «Посетитель».
ModuleElement.ExportsDirective
Экспортируемый пакет модуля.
ModuleElement.OpensDirective
Открытый пакет модуля.
ModuleElement.ProvidesDirective
Реализация службы, предоставляемой модулем.
ModuleElement.RequiresDirective
Зависимость модуля.
ModuleElement.UsesDirective
Ссылка на службу, используемую модулем.
Name
Неизменяемая последовательность символов.
NestingKind
Вид вложенности элемента типа.
PackageElement
Представляет программный элемент-пакет.
Parameterizable
Интерфейс примеси для элемента, имеющего параметры типа.
QualifiedNameable
Интерфейс примеси для элемента, имеющего полное имя.
RecordComponentElement
Представляет компонент записи.
TypeElement
Представляет программный элемент — класс или интерфейс.
TypeParameterElement
Представляет формальный параметр типа обобщённого класса, интерфейса, метода или элемента-конструктора.
UnknownAnnotationValueException
Указывает на обнаружение значения аннотации неизвестного вида.
UnknownDirectiveException
Указывает на обнаружение директивы модуля неизвестного вида.
UnknownElementException
Указывает на обнаружение элемента неизвестного вида.
VariableElement
Представляет поле, константу enum, параметр метода или конструктора, локальную переменную, переменную ресурса или параметр исключения.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.compiler/javax/lang/model/element/package-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API