Spec-Zone.ru › OpenJDK 25

Интерфейс AnnotatedConstruct

Все известные подинтерфейсы:
ArrayType, DeclaredType, Element, ErrorType, ExecutableElement, ExecutableType, IntersectionType, ModuleElement, NoType, NullType, PackageElement, Parameterizable, PrimitiveType, QualifiedNameable, RecordComponentElement, ReferenceType, TypeElement, TypeMirror, TypeParameterElement, TypeVariable, UnionType, VariableElement, WildcardType
public interface AnnotatedConstruct
Представляет конструкцию, к которой могут применяться аннотации. Конструкция — это либо элемент, либо тип. Аннотации элемента относятся к объявлению, тогда как аннотации типа относятся к конкретному использованию имени типа. Согласно разделу 9.7.4 Спецификации языка Java, аннотация элемента является аннотацией объявления, а аннотация типа — аннотацией типа. Термины непосредственно присутствует, присутствует, косвенно присутствует и связано используются в этом интерфейсе для точного описания того, какие аннотации — аннотации объявления или аннотации типа — возвращаются методами этого интерфейса.

В приведённых ниже определениях аннотация A имеет интерфейс аннотации AI. Если AI — повторяемый интерфейс аннотации, типом контейнерной аннотации является AIC.

Аннотация A непосредственно присутствует в конструкции C, если выполняется одно из следующих условий:

  • A явно или неявно объявлена как применяемая к представлению C в исходном коде.

    Обычно, если в исходном коде, представляющем C, присутствует ровно одна аннотация типа AI, то A явно объявлена как применяемая к C. Аннотация типа AI для компонента записи может неявно распространяться на связанные обязательные члены. Аннотации типа, изменяющие тип компонента записи, также могут распространяться на обязательные члены. Распространение аннотаций на обязательные члены регулируется правилами, приведёнными в Спецификации языка Java (JLS 8.10.1). Если для C присутствует несколько аннотаций типа AI, то, если AI является повторяемым интерфейсом аннотации, аннотация типа AIC неявно объявляется для C.

  • Представление A содержится в исполняемом выходном файле для C, например в атрибутах RuntimeVisibleAnnotations (JVMS 4.7.16) или RuntimeVisibleParameterAnnotations (JVMS 4.7.17) файла класса.

Аннотация A присутствует в конструкции C, если выполняется одно из следующих условий:

  • A непосредственно присутствует в C.
  • В C непосредственно не присутствует ни одной аннотации типа AI, C является классом, AI допускает наследование, а A присутствует в суперклассе C.
Аннотация A косвенно присутствует в конструкции C, если выполняются оба следующих условия:
  • AI является повторяемым интерфейсом аннотации с контейнерным интерфейсом аннотации AIC.
  • Аннотация типа AIC непосредственно присутствует в C, а A — это аннотация, включённая в результат вызова метода value для непосредственно присутствующей аннотации типа AIC.
Аннотация A связана с конструкцией C, если выполняется одно из следующих условий:
  • A непосредственно или косвенно присутствует в C.
  • В C непосредственно или косвенно не присутствует ни одной аннотации типа AI, C является классом, AI допускает наследование, а A связана с суперклассом C.
См. Спецификацию языка Java:
9.6 Интерфейсы аннотаций
9.6.4.3 @Inherited
9.7.4 Допустимые места размещения аннотаций
9.7.5 Несколько аннотаций одного интерфейса
Начиная с:
1.8

Краткое описание методов

Модификатор и тип Метод Описание
<A extends Annotation>
A
getAnnotation(Class<A> annotationType)
Возвращает аннотацию этого конструкта указанного типа, если такая аннотация присутствует; в противном случае возвращает null.
List<? extends AnnotationMirror> getAnnotationMirrors()
Возвращает аннотации, которые непосредственно присутствуют в этом конструкте.
<A extends Annotation>
A[]
getAnnotationsByType(Class<A> annotationType)
Возвращает аннотации указанного типа, которые связаны с этим конструктом.

Подробное описание методов

getAnnotationMirrors

List<? extends AnnotationMirror> getAnnotationMirrors()
Возвращает аннотации, которые непосредственно присутствуют в этом конструкте.
Возвращает:
аннотации, непосредственно присутствующие в этом конструкте; пустой список, если таких аннотаций нет

getAnnotation

<A extends Annotation> A getAnnotation(Class<A> annotationType)
Возвращает аннотацию этого конструкта указанного типа, если такая аннотация присутствует; в противном случае возвращает null.

Возвращённая этим методом аннотация может содержать элемент со значением типа Class. Это значение нельзя вернуть напрямую: информация, необходимая для поиска и загрузки класса (например, используемый загрузчик классов), недоступна, а сам класс может быть вообще недоступен для загрузки. Попытка прочитать объект Class, вызвав соответствующий метод у возвращённой аннотации, приведёт к возникновению исключения MirroredTypeException, из которого можно получить соответствующий TypeMirror. Аналогично, попытка прочитать элемент со значением типа Class[] приведёт к возникновению исключения MirroredTypesException.

Примечание: Этот метод отличается от других методов этого и связанных интерфейсов. Он работает с данными рефлексии времени выполнения — представлениями интерфейсов аннотаций, загруженными в данный момент в виртуальную машину, — а не с представлениями, определёнными и используемыми в этих интерфейсах. Поэтому вызовы методов возвращённого объекта аннотации могут приводить ко многим исключениям, возникающим при вызове методов объекта аннотации, возвращённого средствами основной рефлексии. Этот метод предназначен для вызывающего кода, написанного для работы с известным фиксированным набором интерфейсов аннотаций.
Параметры типа:
A — интерфейс аннотации
Параметры:
annotationType — объект Class, соответствующий интерфейсу аннотации
Возвращает:
аннотацию этого конструкта указанного типа, если такая аннотация присутствует; в противном случае возвращает null
См. Спецификацию языка Java:
9.6.1 Элементы интерфейсов аннотаций
См. также:
  • getAnnotationMirrors()
  • AnnotatedElement.getAnnotation(Class)
  • EnumConstantNotPresentException
  • AnnotationTypeMismatchException
  • IncompleteAnnotationException
  • MirroredTypeException
  • MirroredTypesException

getAnnotationsByType

<A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType)
Возвращает аннотации указанного типа, которые связаны с этим конструктом. Если с этим конструктом не связаны аннотации указанного типа, возвращаемое значение — массив длины 0. Порядок аннотаций, непосредственно или косвенно присутствующих в конструкции C, вычисляется так, как если бы косвенно присутствующие аннотации в C непосредственно присутствовали в C вместо их контейнерной аннотации и располагались в том порядке, в котором они указаны в элементе value контейнерной аннотации. Этот метод отличается от метода getAnnotation(Class) тем, что проверяет, является ли его аргумент повторяемым интерфейсом аннотации, и, если это так, пытается найти одну или несколько аннотаций этого типа, «просматривая» контейнерную аннотацию.

Возвращённые этим методом аннотации могут содержать элемент со значением типа Class. Это значение нельзя вернуть напрямую: информация, необходимая для поиска и загрузки класса (например, используемый загрузчик классов), недоступна, а сам класс может быть вообще недоступен для загрузки. Попытка прочитать объект Class, вызвав соответствующий метод у возвращённой аннотации, приведёт к возникновению исключения MirroredTypeException, из которого можно получить соответствующий TypeMirror. Аналогично, попытка прочитать элемент со значением типа Class[] приведёт к возникновению исключения MirroredTypesException.

Примечание: Этот метод отличается от других методов этого и связанных интерфейсов. Он работает с данными рефлексии времени выполнения — представлениями интерфейсов аннотаций, загруженными в данный момент в виртуальную машину, — а не с представлениями, определёнными и используемыми в этих интерфейсах. Поэтому вызовы методов возвращённого объекта аннотации могут приводить ко многим исключениям, возникающим при вызове методов объекта аннотации, возвращённого средствами основной рефлексии. Этот метод предназначен для вызывающего кода, написанного для работы с известным фиксированным набором интерфейсов аннотаций.
Параметры типа:
A — интерфейс аннотации
Параметры:
annotationType — объект Class, соответствующий интерфейсу аннотации
Возвращает:
аннотации этого конструкта указанного типа, если они присутствуют в этом конструкте; в противном случае — пустой массив
См. Спецификацию языка Java:
9.6 Интерфейсы аннотаций
9.6.1 Элементы интерфейсов аннотаций
См. также:
  • getAnnotationMirrors()
  • getAnnotation(Class)
  • AnnotatedElement.getAnnotationsByType(Class)
  • EnumConstantNotPresentException
  • AnnotationTypeMismatchException
  • IncompleteAnnotationException
  • MirroredTypeException
  • MirroredTypesException

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

Spec-Zone.ru

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