Spec-Zone.ru › OpenJDK 21

Интерфейс 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.

    Как правило, если в исходном коде представления 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.
  • Ни одна аннотация типа 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, 2023, 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/21/docs/api/java.compiler/javax/lang/model/AnnotatedConstruct.html

Spec-Zone.ru

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