Spec-Zone.ru › OpenJDK 24

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

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

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

  • 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 константу, параметр метода или конструктора, локальную переменную, переменную ресурса или параметр исключения.

© 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://download.java.net/java/early_access/jdk24/docs/api/java.compiler/javax/lang/model/element/package-summary.html

Spec-Zone.ru

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