Spec-Zone.ru › OpenJDK 25

Пакет javax.lang.model

package javax.lang.model
Типы и иерархии пакетов, составляющих модель языка Java — рефлексивный API, моделирующий объявления и типы языка программирования Java. Элементы этого пакета и его подпакетов предназначены для задач и API моделирования и обработки языков, включая, помимо прочего, инфраструктуру обработки аннотаций.

В основе этой языковой модели лежит архитектура с использованием зеркал; см.

Гилад Браха и Дэвид Унгар. Зеркала: принципы проектирования средств метауровня для объектно-ориентированных языков программирования. В трудах конференции ACM по объектно-ориентированному программированию, системам, языкам и приложениям, октябрь 2004 г.
В частности, модель различает объявленные языковые конструкции, такие как элемент, представляющий java.util.Set, и семейство типов, которые могут быть связаны с элементом, например сырой тип java.util.Set, java.util.Set<String> и java.util.Set<T>.

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

Элементы и типы

Определения и использования

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

Например, рассмотрим использования java.lang.String в приведённом ниже методе обработки строк identityOrEmpty:

// Return the argument if it is non-null and the empty string otherwise.
public static @DefinitelyNotNull String identityOrEmpty(@MightBeNull String argument) {
   ...
}
Тип возвращаемого значения метода — это String с аннотацией типа @DefinitelyNotNull, а тип параметра — это String с аннотацией типа @MightBeNull. В рефлексивном API, поскольку набор аннотаций различается для двух использований String в качестве типа, тип возвращаемого значения и тип аргумента необходимо было бы представить разными объектами, чтобы различать эти два случая. Само определение java.lang.String не имеет ни одной из рассматриваемых аннотаций типа.

Другой пример — объявление обобщённого интерфейса (JLS 9.1.2) java.util.Set, у которого есть один параметр типа. Это объявление задаёт общую основу для множества параметризованных типов (JLS 4.5), производных от этого объявления, таких как java.util.Set<String>, java.util.Set<E>, java.util.Set<?>, а также для сырого типа (JLS 4.8) java.util.Set.

Отображение между элементами и типами

Хотя это разные понятия, между элементами и типами, то есть между определениями и использованиями, существуют частичные отображения в обоих направлениях. Например, грубо говоря, информацию, которая была бы инвариантной для всех использований типа, можно получить из элемента, определяющего этот тип. Рассмотрим, например, зеркало типа DeclaredType, моделирующее использование java.lang.String. Вызов DeclaredType.asElement() вернёт TypeElement для java.lang.String. Из TypeElement можно получить общую информацию, например имя и модификаторы.

Всем элементам можно сопоставить некоторый тип. Элементам классов и интерфейсов сопоставляется прототипический тип. И наоборот, в общем случае многим типам может соответствовать один и тот же элемент типа. Например, зеркало типа для сырого типа java.util.Set, прототипический тип java.util.Set<E> и тип java.util.Set<String> будут все сопоставлены с элементом типа для java.util.Set. Некоторым видам типов можно сопоставить элементы, но у других видов типов нет соответствующего элемента. Например, зеркало исполняемого типа не имеет соответствующего элемента, тогда как объявленный тип сопоставляется с элементом типа, как описано выше.

С версии:
1.6
См. также:
  • JSR 269: Подключаемый API обработки аннотаций
Пакет Описание
javax.lang.model.element
Интерфейсы для моделирования элементов языка программирования Java.
javax.lang.model.type
Интерфейсы для моделирования типов языка программирования Java.
javax.lang.model.util
Вспомогательные средства для обработки элементов программы и типов.
Класс Описание
AnnotatedConstruct
Представляет конструкцию, которую можно аннотировать.
SourceVersion
Версии исходного кода языка программирования Java.
UnknownEntityException
Суперкласс исключений, указывающих на то, что был обнаружен неизвестный вид сущности.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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/package-summary.html

Spec-Zone.ru

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