Spec-Zone.ru › OpenJDK 17

Интерфейс 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 имеет тип аннотации AT. Если AT — это повторяемый тип аннотации, то тип содержащей аннотации — ATC.

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

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

    Как правило, если в исходном коде представления C появляется ровно одна аннотация типа AT, то A явно объявлена как применяющаяся к C. Аннотация типа AT на компоненте записи может быть неявным образом распространена на связанные обязательные члены. Аннотации типа, изменяющие тип компонента записи, также могут распространяться на обязательные члены. Распространение аннотаций на обязательные члены регулируется правилами, приведенными в Спецификации языка Java. Если на C присутствует несколько аннотаций типа AT, то, если AT — это повторяемый тип аннотации, аннотация типа ATC неявным образом объявлена на C.

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

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

  • A прямо присутствует на C.
  • Ни одна аннотация типа AT не прямо присутствует на C, и C — это класс, и AT наследуемый, и A присутствует в суперклассе C.
Аннотация A косвенно присутствует на конструкции C, если выполняются оба условия:
  • AT — это повторяемый тип аннотации с содержащим типом аннотации ATC.
  • Аннотация типа ATC прямо присутствует на C, и A — это аннотация, включённая в результат вызова метода value напрямую присутствующей аннотации типа ATC.
Аннотация A связана с конструкцией C, если выполняется одно из условий:
  • A прямо или косвенно присутствует на C.
  • Ни одна аннотация типа AT не прямо или косвенно присутствует на C, и C — класс, и AT наследуемый, и 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, 2021, 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/17/docs/api/java.compiler/javax/lang/model/AnnotatedConstruct.html

Spec-Zone.ru

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