Spec-Zone.ru › OpenJDK 24

Интерфейс 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
Представляет конструкцию, которая может быть аннотирована. Конструкция является либо элементом, либо типом. Аннотации к элементу относятся к объявлению, а аннотации к типу — к конкретному использованию имени типа. Как определено в Спецификации языка Java в разделе 9.7.4, аннотация к элементу является аннотацией объявления, а аннотация к типу — аннотацией типа. В данном интерфейсе для описания того, какие аннотации, являющиеся аннотациями объявления или аннотациями типа, возвращаются методами интерфейса, используются термины непосредственно присутствующая, присутствующая, косвенно присутствующая и ассоциированная.

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

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

  • A явное или неявное объявление, указывающее, что она применяется к представлению исходного кода C.

    Обычно, если ровно одна аннотация типа AI появляется в исходном коде представления C, то 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.
  • Ни одна аннотация типа AI не присутствует непосредственно на C, и C является классом, и AI является наследовательным, и A присутствует в суперклассе C.
Аннотация A косвенно присутствует на конструкции C, если выполняются оба условия:
  • AI — это интерфейс повторяющейся аннотации с содержащим интерфейсом аннотации AIC.
  • Аннотация типа AIC непосредственно присутствует на C, и A является аннотацией, включённой в результат вызова метода value непосредственно присутствующей аннотации типа AIC.
Аннотация A ассоциирована с конструкцией C, если выполняется одно из условий:
  • A непосредственно или косвенно присутствует на C.
  • Ни одна аннотация типа AI не присутствует непосредственно или косвенно на C, и 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(java.lang.Class<T>)
  • EnumConstantNotPresentException
  • AnnotationTypeMismatchException
  • IncompleteAnnotationException
  • MirroredTypeException
  • MirroredTypesException

getAnnotationsByType

<A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType)
Возвращает аннотации указанного типа, которые ассоциированы с этим конструктом. Если нет аннотаций указанного типа, ассоциированных с этим конструктом, возвращается массив длины 0. Порядок аннотаций, которые непосредственно или косвенно присутствуют в конструкте C, вычисляется так, как если бы косвенно присутствующие аннотации в C были непосредственно присутствующими в C вместо их контейнерной аннотации, в порядке их появления в элементе значения контейнерной аннотации. Разница между этим методом и 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

© 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/AnnotatedConstruct.html

Spec-Zone.ru

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