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<T>)<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<T>)<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<T>)<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<T>)<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> повторяется и позже изменен, чтобы быть повторяемым.
Содержащий тип заметки для T — TC.
<Ул>
<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 |
Возвращает значение |
| JniManagedPeerState |
Состояние управляемого однорангового узла. (Унаследовано от IJavaPeerable) |
| JniObjectReferenceControlBlock |
Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине. (Унаследовано от IJavaPeerable) |
| JniPeerMembers |
Поддержка доступа к членам и вызовов. (Унаследовано от IJavaPeerable) |
| PeerReference |
JniObjectReference Возвращает экземпляр объекта в оболочке Java. (Унаследовано от IJavaPeerable) |
Методы
| Имя. | Описание |
|---|---|
| Disposed() |
Вызывается при удалении экземпляра. (Унаследовано от IJavaPeerable) |
| DisposeUnlessReferenced() |
Если нет невыполненных ссылок на этот экземпляр, то вызывается |
| 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) |
Задайте значение, возвращаемое |
| SetJniManagedPeerState(JniManagedPeerStates) |
Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине. (Унаследовано от IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
Задайте значение, возвращаемое |
| UnregisterFromRuntime() |
Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов. (Унаследовано от IJavaPeerable) |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Представляет аннотированный элемент программы, работающей в данный момент на этой виртуальной машине. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |