Язык

IAnnotatedElement Интерфейс

Определение

Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине.

[Android.Runtime.Register("java/lang/reflect/AnnotatedElement", "", "Java.Lang.Reflect.IAnnotatedElementInvoker")]
public interface IAnnotatedElement : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/lang/reflect/AnnotatedElement", "", "Java.Lang.Reflect.IAnnotatedElementInvoker")>]
type IAnnotatedElement = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Производный
Атрибуты
Реализации

Комментарии

Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине. Этот интерфейс позволяет считывать заметки в отражении. Все заметки, возвращаемые методами в этом интерфейсе, являются неизменяемыми и сериализуемыми. Массивы, возвращаемые методами этого интерфейса, могут быть изменены вызывающими пользователями, не затрагивая массивы, возвращаемые другим вызывающим пользователям.

Примечание Android: методы, возвращающие несколько заметок различных типов, например #getAnnotations() и #getDeclaredAnnotations() могут влиять на явное упорядочивание символьного кода типов заметок, указанных в формате DEX. Заметки разных типов в одном элементе не гарантированно возвращаются в том порядке, в который они объявляются в источнике.

#getAnnotationsByType(Class) Методы #getDeclaredAnnotationsByType(Class) поддерживают несколько заметок одного типа в элементе. Если аргумент для любого метода является повторяемым типом заметки (JLS 9.6), метод будет "просматривать" заметку контейнера (JLS 9.7), если он присутствует, и возвращает все заметки внутри контейнера. Заметки контейнера могут создаваться во время компиляции, чтобы упаковать несколько заметок типа аргумента.

< >Термины em непосредственно присутствуют</em, эм косвенно присутствуют>/<em, ><>em<present>/<em> и <em>associated</em> в этом интерфейсе, чтобы описать точно, какие заметки возвращаются методами:

<Ул>

<li> Заметка A является <>em напрямую присутствует</em> для элемента E, если E аннотирован A в исходном источнике.

<li>Примечание A является косвенным <>представлением</em> для элемента E, если E аннотирован заметкой контейнера A.

<li>Заметка A присутствует в элементе E , если это:

<Ул>

<li>A непосредственно присутствует на E; или

<li>Нет заметки типа A непосредственно присутствует на E, и E является классом, и тип A наследуется, и A присутствует на суперклассе E.

</ul>

<li>Заметка A связана<>< или em> с элементом E, если одно из них:

<Ул>

<li>A прямо или косвенно присутствует на E; или

<li>Нет заметки типа A прямо или косвенно присутствует на E, и E является классом, и тип A наследуется, и A связан с суперклассом E.

</ul>

</ul>

В таблице ниже приведены сведения о том, какие методы присутствия заметок в этом интерфейсе проверяются.

<table class="plain">caption Overview of kind of presence detected by different AnnotatedElement methods</caption><>thead<>th<colspan=2 scope="col"><Method>/th th<>colspan=4 scope="col"<Kind of Presence>/th<>tr<th scope="col"><Return Type>/<>th th scope="col"Signature</><th th scope="col"><Directly Present>/<>th th scope="col"<>Косвенное представление</><th th scope="col">Present</th><th scope="col">Associated</th/><thead><tbody><tr><td style="text-align:right">T</td><th scope="row" style="font-weight:normal; text-align:left">#getAnnotation(Class) getAnnotation(Class&lt;T&gt;)<td></td><></td td><style="text-align:center">X</td><td></td/><tr tr><><td style=" text-align:right">Annotation[]</td><th scope="row" style="font-weight:normal; text-align:left">#getAnnotations getAnnotations()<td></td><></td><td style="text-align:center">X</td><td></><tr tr><><td style="text-align:right">T[]<></td th scope="row" style="font-weight:normal; text-align:left">#getAnnotationsByType(Class) getAnnotationsByType(Class&lt;T&gt;)<td></><><><><td/td td/td td><style=" text-align:center">X</td/tr tr><>td style="text-align:right"/td<><>T th scope="row" style="<><font-weight:normal; text-align:left">#getDeclaredAnnotation(Class) getDeclaredAnnotation(Class&lt;T&gt;)<td style="text-align:center>"X</td><td></><><td/td td/><><><tr tr><><td style="text-align:right">Annotation[]</td><th scope="row" style=" font-weight:normal; text-align:left">#getDeclaredAnnotations getDeclaredAnnotations()<td style="text-align:center">X</td><td></><><td/td td/><><td/><tr tr><><td style="text-align:right">T[]</td><th scope="row" style="font-weight:normal; text-align:left">#getDeclaredAnnotationsByType(Class) getDeclaredAnnotationsByType(Class&lt;T&gt;)<td style="text-align:center">X</td td><style="text-align:center">X</td><td></td td><></td></tr></tbody></table>

Для вызова get[Declared]AnnotationsByType( Class < T >), порядок заметок, которые прямо или косвенно присутствуют в элементе E , вычисляются так, как если бы косвенно представленные заметки на E непосредственно присутствуют на E вместо их заметки контейнера, в порядке, в котором они отображаются в элементе значения заметки контейнера.

Существует несколько проблем совместимости, которые следует учитывать, если тип заметки T изначально <>em не</em> повторяется и позже изменен, чтобы быть повторяемым.

Содержащий тип заметки для TTC.

<Ул>

<li>Изменение T для повторяемого кода является исходным и двоичным совместимым с существующими использованием T и существующими использованием TC.

То есть для совместимости источников исходный код с заметками типа T или типа TC по-прежнему компилируется. Для двоичной совместимости файлы классов с заметками типа T или типа TC (или с другими видами использования типа T или типа TC) будут ссылаться на измененную версию T , если они связаны с более ранней версией.

(Тип заметки TC может неформальным образом служить действием, содержащим тип заметки, прежде чем T будет официально повторяться. Кроме того, при повторном выполнении T можно ввести TC в качестве нового типа.)

<li>, если в элементе присутствует тип заметки TC , и T изменяется для повторения с помощью TC в качестве его содержащего тип заметки, а затем:

<Ул>

<li>Изменение T совместимо с поведением относительно get[Declared]Annotation(Class<T>) (вызываемого с аргументом T или TC) и методов, так как результаты методов не изменятся из-за того, что get[Declared]Annotations() становится содержащим тип заметки для T.

<li>Изменение T изменяет результатыget[Declared]AnnotationsByType(Class<T>) методов, вызываемых с аргументом T, так как эти методы теперь распознают заметку типа TC в виде заметки контейнера для T и будут "просматривать" его для предоставления заметок типа T.

</ul>

<li>, если в элементе присутствует заметка типа T , а В элемент добавляется несколько заметок типа T :

<Ул>

<li> Добавление заметок типа T является совместимым с источником и двоичным совместимым.

<li>Добавление заметок типа T изменяет результаты get[Declared]Annotation(Class<T>) методов и get[Declared]Annotations() методов, так как эти методы теперь будут видеть только заметку контейнера в элементе, а не видеть заметку типа T.

<li>Добавление заметок типа T изменяет результаты методов, так как их результаты get[Declared]AnnotationsByType(Class<T>) будут предоставлять дополнительные заметки типа T , в то время как ранее они предоставляли только одну заметку типа T.

</ul>

</ul>

Если заметка, возвращаемая методом в этом интерфейсе, содержит (прямо или косвенно) Classэлемент с значением, ссылающийся на класс, который недоступен на этой виртуальной машине, попытка считывать класс путем вызова соответствующего метода возврата класса в возвращаемой заметке приведет к возникновению TypeNotPresentExceptionошибки.

Аналогичным образом попытка считывания элемента перечисления приведет к EnumConstantNotPresentException тому, что константа перечисления в заметке больше не присутствует в типе перечисления.

Если тип заметки T (мета-)аннотирован с @Repeatable заметкой, элемент значения которого указывает тип TC, но TC не объявляет value() метод с возвращаемым типом T[], создается исключение типа java.lang.annotation.AnnotationFormatError .

Наконец, попытка считывать член, определение которого развивалось несогласованно, приведет к тому, что java.lang.annotation.AnnotationTypeMismatchException он или .java.lang.annotation.IncompleteAnnotationException

Добавлено в версии 1.5.

Java документации по java.lang.reflect.AnnotatedElement.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Свойства

Имя. Описание
Handle

Возвращает значение JNI базового объекта Android.

(Унаследовано от IJavaObject)
JniIdentityHashCode

Возвращает значение java.lang.System.identityHashCode() для упаковаемого экземпляра.

(Унаследовано от IJavaPeerable)
JniManagedPeerState

Состояние управляемого однорангового узла.

(Унаследовано от IJavaPeerable)
JniObjectReferenceControlBlock

Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине.

(Унаследовано от IJavaPeerable)
JniPeerMembers

Поддержка доступа к членам и вызовов.

(Унаследовано от IJavaPeerable)
PeerReference

JniObjectReference Возвращает экземпляр объекта в оболочке Java.

(Унаследовано от IJavaPeerable)

Методы

Имя. Описание
Disposed()

Вызывается при удалении экземпляра.

(Унаследовано от IJavaPeerable)
DisposeUnlessReferenced()

Если нет невыполненных ссылок на этот экземпляр, то вызывается Dispose(); в противном случае ничего не делает.

(Унаследовано от IJavaPeerable)
Finalized()

Вызывается при завершении экземпляра.

(Унаследовано от IJavaPeerable)
GetAnnotation(Class)

Возвращает заметку этого элемента для указанного типа, если такая заметка является <em>present</em>, else null.

GetAnnotations()

Возвращает заметки, которые представляют собой <em>present</em> для этого элемента.

GetAnnotationsByType(Class)

Возвращает заметки, связанные с этим элементом <>или эм<.>

GetDeclaredAnnotation(Class)

Возвращает заметку этого элемента для указанного типа, если такая заметка является <>em напрямую присутствует</em>, в противном случае значение NULL.

GetDeclaredAnnotations()

Возвращает заметки, которые находятся <>непосредственно< в этом элементе или em>.

GetDeclaredAnnotationsByType(Class)

Возвращает заметки этого элемента для указанного типа, если такие заметки имеют <значение em напрямую или>< em или >косвенно<присутствуют>/em<.>

IsAnnotationPresent(Class)

Возвращает значение true, если заметка для указанного типа имеет значение <>em</em> для этого элемента, значение false.

SetJniIdentityHashCode(Int32)

Задайте значение, возвращаемое JniIdentityHashCode.

(Унаследовано от IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине.

(Унаследовано от IJavaPeerable)
SetPeerReference(JniObjectReference)

Задайте значение, возвращаемое PeerReference.

(Унаследовано от IJavaPeerable)
UnregisterFromRuntime()

Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов.

(Унаследовано от IJavaPeerable)

Методы расширения

Имя. Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к