MethodHandles.Lookup Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа.
[Android.Runtime.Register("java/lang/invoke/MethodHandles$Lookup", ApiSince=26, DoNotGenerateAcw=true)]
public sealed class MethodHandles.Lookup : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/MethodHandles$Lookup", ApiSince=26, DoNotGenerateAcw=true)>]
type MethodHandles.Lookup = class
inherit Object
- Наследование
- Атрибуты
Комментарии
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. Дескриптор методов не выполняет проверки доступа при их вызове, а вместо того, когда они создаются. Поэтому при создании дескриптора метода необходимо применять ограничения доступа. Вызывающий класс, против которого применяются эти ограничения, называется классом #lookupClass подстановки.
Класс подстановки, который должен создавать дескриптор методов, вызовет #lookup MethodHandles.lookup
создание фабрики для себя. Lookup
При создании объекта фабрики определяется удостоверение класса подстановки и безопасно хранится в объектеLookup
. Затем класс подстановки (или его делегаты) может использовать методы фабрики в объекте Lookup
для создания дескрипторов методов для проверяемых элементов доступа. Сюда входят все методы, конструкторы и поля, которые разрешены для класса подстановки, даже частные.
<h1>"lookups">Lookup Factory Methods</h1> . Методы фабрики в Lookup
объекте соответствуют всем основным вариантам использования методов, конструкторов и полей. Каждый дескриптор метода, созданный методом фабрики, является функциональным эквивалентом определенного <поведения< emtecode>/em>. (Поведение байт-кода описано в разделе 5.4.3.5 спецификации виртуальной машины Java.) Ниже приведена сводка между этими методами фабрики и поведением результирующего метода: <таблица border=1 cellpadding=5 summary="lookup method behaviors"<>tr><th>"equiv">lookup expression</><>th member</><>th th tecode behavior/th th bytecode behavior<></th/tr<>><td><java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)
/<><>FT f;
td/tr><>(T) this.f;
<><><tr<>td<java.lang.invoke.MethodHandles.Lookup#findStaticGetter lookup.findStaticGetter(C.class,"f",FT.class)
>/static
><><td td br>FT f;
</td/td>(T) C.f;
<></td></tr tr>>><<java.lang.invoke.MethodHandles.Lookup#findSetter lookup.findSetter(C.class,"f",FT.class)
< td/>><<FT f;
<this.f = x;
>>><<td/td/<>tr<<>java.lang.invoke.MethodHandles.Lookup#findStaticSetter lookup.findStaticSetter(C.class,"f",FT.class)
> td/td br/static
<FT f;
<<>>>td><<C.f = arg;
><>/tr><><td/<>T m(A*);
><td td/>><<(T) this.m(arg*);
<>tr tr>><<<java.lang.invoke.MethodHandles.Lookup#findStatic lookup.findStatic(C.class,"m",MT)
> td/>>static
<<td td br(T) C.m(arg*);
><><><T m(A*);
/td/<<>>tr tr><java.lang.invoke.MethodHandles.Lookup#findSpecial lookup.findSpecial(C.class,"m",MT,this.class)
>< td/td/<(T) super.m(arg*);
><<>><>><T m(A*);
td/tr><>java.lang.invoke.MethodHandles.Lookup#findVirtual lookup.findVirtual(C.class,"m",MT)
<>>java.lang.invoke.MethodHandles.Lookup#findConstructor lookup.findConstructor(C.class,MT)
<<td/td><<>C(A*);
td/td/td/>new C(arg*);
><<td></tr tr<><>td<java.lang.invoke.MethodHandles.Lookup#unreflectGetter lookup.unreflectGetter(aField)
>/td<>>(static
)?<br>FT f;
</td><td>(FT) aField.get(thisOrNull);
</td></tr tr><><td<java.lang.invoke.MethodHandles.Lookup#unreflectSetter lookup.unreflectSetter(aField)
>/td<>>(static
)?<br>FT f;
</td><td>aField.set(thisOrNull, arg);
</td></tr tr><><td<java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)
>/td<>>(static
)?<br>T m(A*);
</td><td><(T) aMethod.invoke(thisOrNull, arg*);
/td/><tr tr>><<td<>java.lang.invoke.MethodHandles.Lookup#unreflectConstructor lookup.unreflectConstructor(aConstructor)
/td/C(A*);
>><<td/(C) aConstructor.newInstance(arg*);
>><<td/td/><td/tr>><java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)
<>< td/td/td>><(static
)?<br>T m(A*);
</td td></td><(T) aMethod.invoke(thisOrNull, arg*);
<>/tr></table>
Здесь тип C
— это класс или интерфейс, искомый элемент, задокументирован как параметр с именем refc
в методах подстановки. Тип MT
метода состоит из возвращаемого типа T
и последовательности типов аргументов A*
. Конструктор также имеет последовательность типов аргументов A*
и считается возвращать только что созданный объект типа C
. Оба MT
типа FT
поля документируются как параметр с именем type
. Формальный параметр this
обозначает самосчет типа C
; если он присутствует, он всегда является ведущим аргументом вызова дескриптора метода. (В случае некоторых protected
элементов this
может быть ограничено типом класса подстановки; см. ниже.) Имя arg
означает все аргументы дескриптора других методов. В примерах кода для API отражения ядра имя thisOrNull
означает пустую ссылку, если доступ к методу или полю является статическим и this
в противном случае. Имена aMethod
и aField
aConstructor
стоять на отражающих объектах, соответствующих заданным элементам.
В случаях, когда заданный член имеет переменную arity (т. е. метода или конструктора), возвращенный дескриптор метода также будет иметь значение arity переменной MethodHandle#asVarargsCollector. Во всех остальных случаях возвращенный дескриптор метода будет иметь фиксированный arity. <p style="font-size:small;"><Em Discussion:</em>> Эквивалентность между дескрипторами методов поиска и базовыми элементами класса и поведением байт-кода может разбиться несколькими способами: <ul style="font-size:small;"><li>Если C
не является символично доступным из загрузчика класса подстановки, поиск по-прежнему может завершиться успешно, даже если нет эквивалентного выражения Java или байтовой константы. <li>Аналогичным образом, если T
или MT
не является символично доступным из загрузчика класса подстановки, поиск по-прежнему может завершиться успешно. Например, поиски и MethodHandle.invoke
всегда будут успешно выполнены MethodHandle.invokeExact
независимо от запрошенного типа. <li>Если установлен диспетчер безопасности, он может запретить поиск на различных основаниях (см. ниже). В отличие от этого, ldc
инструкция по CONSTANT_MethodHandle
константе не подлежит проверке диспетчера безопасности. <li>Если метод поиска имеет очень большой arity, создание дескриптора метода может завершиться сбоем из-за типа дескриптора метода с слишком большим количеством параметров. </ul>
<h1>"access">Проверка< доступа/h1> Проверки доступа применяются в методах фабрики Lookup
при создании дескриптора метода. Это ключевое отличие от API основного отражения, так как java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke
выполняет проверку доступа к каждому вызывающей стороне при каждом вызове.
Все проверки доступа начинаются с объекта, который сравнивает записанный Lookup
класс подстановки со всеми запросами на создание дескрипторов методов. Один Lookup
объект можно использовать для создания любого числа дескрипторов методов, проверяемых на доступе, все проверяется на один класс подстановки.
Объект Lookup
можно совместно использовать с другим доверенным кодом, например протоколом метаобъекта. Общий Lookup
объект делегирует возможность создания дескрипторов метода для частных членов класса подстановки. Даже если привилегированный Lookup
код использует объект, проверка доступа ограничена привилегиями исходного класса подстановки.
Запрос может завершиться ошибкой, так как содержащийся класс недоступен для класса подстановки, или из-за отсутствия нужного члена класса или из-за отсутствия нужного члена класса подстановки или из-за того, что объект подстановки недостаточно доверенный для доступа к члену. В любом из этих случаев ReflectiveOperationException
создается исключение из попытки поиска. Точный класс будет одним из следующих: ul>li NoSuchMethodException — если метод запрашивается, но не существует <li NoSuchFieldException — если поле запрашивается, но не существует li>>IllegalAccessException — если член существует, но проверка доступа завершается <ошибкой </ul><<>
Как правило, условия, при которых дескриптор метода может быть искать метод M
, не являются более строгими, чем условия, в которых класс подстановки мог скомпилировать, проверить и разрешить вызов M
. Когда JVM вызовет такие исключения, как подстановка NoSuchMethodError
дескриптора метода, обычно вызывает соответствующее проверенное исключение, например NoSuchMethodException
. И эффект вызова дескриптора метода, полученного из подстановки, точно эквивалентен выполнению скомпилированного, проверенного и разрешенного вызова M
. То же самое значение равно полям и конструкторам. <p style="font-size:small;"><Em Discussion:</em>> Access проверки применяются только к именованным и отраженным методам, конструкторам и полям. Другие методы создания методов обработки методов, например MethodHandle#asType MethodHandle.asType
, не требуют каких-либо проверок доступа и используются независимо от любого Lookup
объекта.
Если требуется элемент protected
, применяются обычные правила JVM, включая требование, что класс подстановки должен находиться в том же пакете, что и нужный член, или должен наследовать этот элемент. (См. спецификацию виртуальной машины Java, разделы 4.9.2, 5.4.3.5 и 6.4.) Кроме того, если нужный элемент является нестатичным полем или методом в другом пакете, результирующий дескриптор метода может применяться только к объектам класса подстановки или одному из его подклассов. Это требование применяется путем сужения типа ведущего this
параметра C
(который обязательно будет суперклассом класса подстановки) к самому классу подстановки.
JVM накладывает аналогичное требование к invokespecial
инструкции, что аргумент приемника должен соответствовать как разрешенным методом <em>, так и< /em> текущего класса. Опять же, это требование применяется путем сужения типа ведущего параметра к результирующей дескриптору метода. (См. спецификацию виртуальной машины Java, раздел 4.10.1.9.)
JVM представляет конструкторы и блоки статического инициализатора как внутренние методы со специальными именами ("<init>"
и "<clinit>"
). Внутренний синтаксис инструкций вызова позволяет им ссылаться на такие внутренние методы, как если бы они были обычными методами, но средство проверки байт-кода JVM отклоняет их. Поиск такого внутреннего метода приведет к получению NoSuchMethodException
.
В некоторых случаях доступ между вложенными классами получается компилятором Java путем создания метода-оболочки для доступа к частному методу другого класса в том же объявлении верхнего уровня. Например, вложенный класс C.D
может получить доступ к частным членам в других связанных классах, таких как C
, C.D.E
или C.B
, но компилятор Java может потребоваться создать методы оболочки в этих связанных классах. В таких случаях Lookup
объект C.E
не сможет использовать эти частные члены. Решением для этого ограничения является Lookup#in Lookup.in
метод, который может преобразовать поиск C.E
в один из этих других классов без специального повышения привилегий.
Доступ, разрешенный для заданного объекта подстановки, может быть ограничен в соответствии с его набором #lookupModes lookupModes
элементов, которые обычно доступны для класса подстановки. Например, метод создает объект подстановки, #publicLookup publicLookup
который разрешен только для доступа к общедоступным членам в общедоступных классах. Вызывающий конфиденциальный метод #lookup lookup
создает объект подстановки с полными возможностями относительно класса вызывающего объекта, чтобы эмулировать все поддерживаемые байт-коды поведения. Кроме того, Lookup#in Lookup.in
метод может создать объект подстановки с меньшим количеством режимов доступа, чем исходный объект подстановки.
<p style="font-size:small;" "> privacc"><em>Обсуждение частного доступа:</em> Мы говорим, что поиск имеет <em>private access</em> , если его #lookupModes режимы подстановки private
включают возможность доступа к членам. Как описано в соответствующих методах в другом месте, только подстановки с частным доступом обладают следующими возможностями: <ul style="font-size:small;"><li>access частных полей, методов и конструкторов класса <подстановки li>create method handles, которые вызывают конфиденциальные методы вызывающего объекта, например<Class.forName
li>create method обрабатывает, какие Lookup#findSpecial emulate invokespecial
инструкции <li избежать>проверок доступа к пакетам для классов, доступных классу подстановки <li>, создайтеLookup#in delegated lookup objects
, которые имеют частный доступ к другим классам в одном члене <пакета /ul><p style="font-size: меньше;"> Каждое из этих разрешений является следствием того, что объект подстановки с частным доступом можно безопасно отследить до исходного класса, поведение байт-кода и разрешения доступа к языку Java можно надежно определить и эмулировать с помощью дескрипторов методов.
<h1>"secmgr">Security Manager interactions</h1> , хотя инструкции по байткоду могут ссылаться только на классы в связанном загрузчике классов, этот API может искать методы в любом классе, если ссылка на его Class
объект доступна. Такие перекрестные ссылки также возможны с помощью API отражения ядра, и не удается выполнить инструкции по байт-коду, invokestatic
например или getfield
. Существует API диспетчера безопасности java.lang.SecurityManager, позволяющий приложениям проверять такие перекрестные ссылки. Эти проверки применяются как к API, так и к API основного MethodHandles.Lookup
отражения (как показано в java.lang.Class Class
).
Если диспетчер безопасности присутствует, подстановки участников подвергаются дополнительным проверкам. От одного до трех вызовов выполняются диспетчеру безопасности. Любой из этих вызовов может отказаться от доступа путем java.lang.SecurityException SecurityException
вызова. Определите smgr
в качестве диспетчера безопасности класс подстановки текущего объекта подстановки, lookc
refc
как содержащий класс, в котором выполняется поиск элемента, и defc
как класс, в котором на самом деле определен элемент. Значение lookc
определяется как <em>не присутствует</em> , если текущий объект подстановки не имеет закрытого доступа. Вызовы выполняются в соответствии со следующими правилами: <ul><li><b Step 1:</b>> Если lookc
нет, или если его загрузчик класса не совпадает с или предком загрузчика refc
класса, то SecurityManager#checkPackageAccess smgr.checkPackageAccess(refcPkg)
вызывается, где refcPkg
находится пакетrefc
. <li><b Шаг 2:</b>>, если извлеченный член не является общедоступным и lookc
не присутствует, вызывается SecurityManager#checkPermission smgr.checkPermission
с RuntimePermission("accessDeclaredMembers")
именем. <li><b Шаг 3.</b>> Если извлеченный член не является общедоступным, и если lookc
он отсутствует, а если defc
и refc
отличается, SecurityManager#checkPackageAccess smgr.checkPackageAccess(defcPkg)
вызывается, где defcPkg
находится пакетdefc
. <Проверки безопасности /ul> выполняются после прохождения других проверок доступа. Таким образом, приведенные выше правила предполагают, что член является общедоступным или другим, к которому осуществляется доступ из класса подстановки, имеющего права доступа к члену.
<h1>"callens">Caller конфиденциальные методы/h1> Небольшое количество методов< Java имеет специальное свойство, называемое конфиденциальности вызывающего объекта. Метод <em>caller-sensitive</em> может вести себя по-разному в зависимости от удостоверений его немедленного вызывающего объекта.
Если запрашивается дескриптор метода, чувствительный к вызывающей стороне, применяются общие правила поведения байт-кода, но они учитывают класс подстановки особым образом. Результирующий дескриптор метода ведет себя так, как если бы он был вызван из инструкции, содержащейся в классе подстановки, так что вызывающий метод обнаруживает класс подстановки. (Напротив, вызывающий дескриптор метода игнорируется.) Таким образом, в случае вызывающих методов различные классы подстановки могут привести к по-разному дескрипторов методов.
В случаях, когда объект подстановки — #publicLookup publicLookup()
или другой объект подстановки без закрытого доступа, класс подстановки игнорируется. В таких случаях не может быть создан дескриптор вызывающего метода, доступ запрещен, а поиск завершается ошибкой IllegalAccessException
. <p style="font-size:small;"><Em>Discussion:</em> Например, вызывающий метод java.lang.Class#forName(String) Class.forName(x)
может возвращать различные классы или вызывать различные исключения в зависимости от загрузчика класса, вызывающего его. Сбой общедоступного поиска, так как не существует разумного Class.forName
способа определить его поведение байт-кода. <p style="font-size:small;"> Если метод кэширования приложений обрабатывает широкий общий доступ, он должен использовать publicLookup()
для их создания. Если есть поиск Class.forName
, он завершится ошибкой, и приложение должно предпринять соответствующее действие в этом случае. Может быть, что последующий поиск, возможно, во время вызова метода начальной загрузки, может включать в себя определенное удостоверение вызывающего объекта, что делает метод доступным. <p style="font-size:small;"> MethodHandles.lookup
Функция учитывает вызывающий объект, чтобы обеспечить безопасный фундамент для поиска. Почти все другие методы в API JSR 292 используют объекты подстановки для проверки запросов на доступ.
Документация по Java для java.lang.invoke.MethodHandles.Lookup
.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.
Поля
Package |
Устаревшие..
Одно битовая маска, |
Private |
Устаревшие..
Однобитовая маска, представляющая |
Protected |
Устаревшие..
Однобитовая маска, представляющая |
Public |
Устаревшие..
Однобитовая маска, представляющая |
Свойства
Class |
Возвращает класс среды выполнения этого |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
JniIdentityHashCode |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
JniPeerMembers |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. |
PeerReference |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
Методы
Bind(Object, String, MethodType) |
Создает дескриптор метода с ранней привязкой к нестатическому методу. |
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Dispose() |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
Dispose(Boolean) |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
FindConstructor(Class, MethodType) |
Создает дескриптор метода, который создает объект и инициализирует его с помощью конструктора указанного типа. |
FindGetter(Class, String, Class) |
Создает дескриптор метода, предоставляющий доступ для чтения к нестатическому полю. |
FindSetter(Class, String, Class) |
Создает дескриптор метода, предоставляющий доступ на запись к нестатическому полю. |
FindSpecial(Class, String, MethodType, Class) |
Создает дескриптор метода с ранней привязкой для виртуального метода. |
FindStatic(Class, String, MethodType) |
Создает дескриптор метода для статического метода. |
FindStaticGetter(Class, String, Class) |
Создает дескриптор метода, предоставляющий доступ для чтения к статическому полю. |
FindStaticSetter(Class, String, Class) |
Создает дескриптор метода, предоставляющий доступ на запись к статическому полю. |
FindStaticVarHandle(Class, String, Class) |
Создает VarHandle, предоставляющий доступ к статическому полю |
FindVarHandle(Class, String, Class) |
Создает VarHandle, предоставляющий доступ к нестатическому полю |
FindVirtual(Class, String, MethodType) |
Создает дескриптор метода для виртуального метода. |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
In(Class) |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. |
JavaFinalize() |
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
LookupClass() |
Указывает, какой класс выполняет поиск. |
LookupModes() |
Указывает, какие классы защиты доступа членов этого объекта подстановки могут создавать. |
Notify() |
Пробуждение одного потока, ожидающего монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
RevealDirect(MethodHandle) |
Взломает прямой дескриптор метода, созданный этим объектом подстановки или аналогичным. |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
ToArray<T>() |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
Unreflect(Method) |
Делает прямой дескриптор метода m, если класс подстановки имеет разрешение. |
UnreflectConstructor(Constructor) |
Создает дескриптор метода для отраженного конструктора. |
UnreflectGetter(Field) |
Создает дескриптор метода, предоставляющий доступ для чтения к отражаемом полю. |
UnreflectSetter(Field) |
Создает дескриптор метода, предоставляющий доступ на запись к отражаемом полю. |
UnreflectSpecial(Method, Class) |
Создает дескриптор метода для отраженного метода. |
UnreflectVarHandle(Field) |
Создает VarHandle, предоставляющий доступ к отраженному полю |
UnregisterFromRuntime() |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>. (Унаследовано от Object) |
Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
IJavaPeerable.DisposeUnlessReferenced() |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
IJavaPeerable.Finalized() |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
IJavaPeerable.JniManagedPeerState |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. (Унаследовано от Object) |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. |
GetJniTypeName(IJavaPeerable) |
<>Объект< подстановки em> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. |