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
Наследование
MethodHandles.Lookup
Атрибуты

Комментарии

Объект <или em<> подстановки —>это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа. Дескрипторы методов не выполняют проверки доступа при их вызове, а при их создании. Поэтому при создании дескриптора метода необходимо применять ограничения доступа к дескриптору метода. Класс вызывающего абонента, к которому применяются эти ограничения, называется классом #lookupClass поиска.

Класс подстановки, которому необходимо создать дескриптор метода, будет вызывать #lookup MethodHandles.lookup для создания фабрики для себя. Lookup При создании объекта фабрики идентификатор класса подстановки определяется и безопасно сохраняется в объекте Lookup . Затем класс подстановки (или его делегаты) может использовать фабричные методы в объекте Lookup для создания дескрипторов методов для элементов, проверяемых доступом. Сюда входят все методы, конструкторы и поля, которые разрешены для класса подстановки, даже частные.

<h1>"lookups">Lookup Factory Methods</h1> Методы фабрики Lookup в объекте соответствуют всем основным вариантам использования методов, конструкторов и полей. Каждый дескриптор метода, созданный фабричном методом, является функциональным эквивалентом определенного <поведения<> байт-кода em>. (Поведение байт-кода описано в разделе 5.4.3.5 спецификации виртуальной машины Java.) Ниже приведена сводка о соответствии между этими фабричные методы и поведением результирующего метода: <table border=1 cellpadding=5 summary="lookup method behaviors"><tr><th>"equiv">lookup expression</th><th>member</th><>bytecode behavior</th<>/tr<<>>td<java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)>/td<>td<>FT f;/td><><(T) this.f;<>/tr><tr<>td<>java.lang.invoke.MethodHandles.Lookup#findStaticGetter lookup.findStaticGetter(C.class,"f",FT.class)/td<>td<static>br<FT f;>/td><td<(T) C.f;>/td></tr>><<td<>java.lang.invoke.MethodHandles.Lookup#findSetter lookup.findSetter(C.class,"f",FT.class)/td><tdFT f;<>/td><td<this.f = x;>/td<>/tr td/tr>><<tdjava.lang.invoke.MethodHandles.Lookup#findStaticSetter lookup.findStaticSetter(C.class,"f",FT.class)></td td<>><staticbr><FT f;/td td><C.f = arg;/td<><>/tr><><td><java.lang.invoke.MethodHandles.Lookup#findVirtual lookup.findVirtual(C.class,"m",MT)/td><td><T m(A*);/td><td><(T) this.m(arg*);/td></tr<><>td><java.lang.invoke.MethodHandles.Lookup#findStatic lookup.findStatic(C.class,"m",MT)/td td<<>>staticbr><T m(A*);/td td<>(T) C.m(arg*);/td><></tr>><<td><java.lang.invoke.MethodHandles.Lookup#findSpecial lookup.findSpecial(C.class,"m",MT,this.class)/td/td><td<T m(A*);>/td td/td><td><(T) super.m(arg*);/td<>/tr><td><java.lang.invoke.MethodHandles.Lookup#findConstructor lookup.findConstructor(C.class,MT)/td><td><C(A*);/td><td>new C(arg*);</td></tr<><>td><java.lang.invoke.MethodHandles.Lookup#unreflectGetter lookup.unreflectGetter(aField)/td td>><(static)?<><br><FT f;/td><td>(FT) aField.get(thisOrNull);</td></tr<>td<java.lang.invoke.MethodHandles.Lookup#unreflectSetter lookup.unreflectSetter(aField)><>/td><td>(static)?<br><FT f;/td><td>aField.set(thisOrNull, arg);</td></tr<>td<java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)><>/td><td>(static)?<br><T m(A*);/td><td><(T) aMethod.invoke(thisOrNull, arg*);/td></tr><td><<>java.lang.invoke.MethodHandles.Lookup#unreflectConstructor lookup.unreflectConstructor(aConstructor)/td><tdC(A*);></td td>(C) aConstructor.newInstance(arg*);<></td></tr td/td/tr<<>>td<java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)>/td><td>(static)?<br><T m(A*);/td><td><(T) aMethod.invoke(thisOrNull, arg*);/td></tr></table>

Здесь типом C является класс или интерфейс, в которых выполняется поиск элемента, который задокументирован как параметр с именем refc в методах поиска. Тип MT метода состоит из возвращаемого типа T и последовательности типов A*аргументов . Конструктор также имеет последовательность типов A* аргументов и считается возвращать только что созданный объект типа C. И MT тип FT поля задокументированы как параметр с именем type. Формальный параметр this расшифровывается как самоназвание типа C; если он присутствует, он всегда является ведущим аргументом для вызова дескриптора метода. (В случае некоторых protected членов this может быть ограничен по типу классом подстановки; см. ниже.) Имя arg обозначает все остальные аргументы дескриптора метода. В примерах кода для API отражения ядра имя thisOrNull означает пустую ссылку, если метод или поле для доступа являются статическими, и this в противном случае. Имена aMethod, aFieldи aConstructor — это отражающие объекты, соответствующие заданным членам.

В случаях, когда заданный член имеет переменную arity (т. е. метод или конструктор), возвращаемый дескриптор метода также будет иметь значение MethodHandle#asVarargsCollector переменной arity. Во всех остальных случаях возвращаемый дескриптор метода будет иметь фиксированную arity. <p style="font-size:smaller;"><Em>Discussion:</em> Эквивалентность между дескрипторами метода поиска и базовыми членами класса и поведением байт-кода может разбиться несколькими способами: <ul style="font-size:smaller;"><Li>Если C не является символически доступным из загрузчика класса подстановки, поиск по-прежнему может быть успешным, даже если нет эквивалентного выражения Java или константы с байт-кодом. <Li>Аналогичным образом, если T или MT не является символически доступным из загрузчика класса подстановки, поиск по-прежнему может быть успешным. Например, поиск и MethodHandle.invokeExactMethodHandle.invoke всегда будет успешным, независимо от запрошенного типа. <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 — if a method is requested but does not exist <li>NoSuchFieldException — if a field is requested but does not exist <li>IllegalAccessException — if the member exists but a access проверка сбой </ul><<>

Как правило, условия, при которых дескриптор метода можно искать для метода M , не являются более строгими, чем условия, при которых класс подстановки мог скомпилировать, проверить и разрешить вызов M. Там, где виртуальная машина Java вызывает исключения, такие как NoSuchMethodError, при поиске дескриптора метода обычно возникает соответствующее проверенное исключение, например NoSuchMethodException. А эффект вызова дескриптора метода, полученного в результате поиска, в точности эквивалентен выполнению скомпилированного, проверенного и разрешенного вызова .M То же самое относится и к полям и конструкторам. <p style="font-size:smaller;"><Em>Discussion:</em> Проверки доступа применяются только к именованным и отраженным методам, конструкторам и полям. Другие методы дескриптора, такие как MethodHandle#asType MethodHandle.asType, не требуют проверки доступа и используются независимо от любого Lookup объекта.

Если нужным элементом является protected, применяются обычные правила виртуальной машины Java, включая требование о том, что класс подстановки должен находиться в том же пакете, что и нужный член, или должен наследовать этот элемент. (См. спецификацию виртуальной машины Java, разделы 4.9.2, 5.4.3.5 и 6.4.) Кроме того, если нужным элементом является нестатическое поле или метод в другом пакете, результирующий дескриптор метода может применяться только к объектам класса подстановки или одного из его подклассов. Это требование реализуется путем сужения типа ведущего this параметра с C (который обязательно будет суперклассом класса поиска) до самого класса подстановки.

Виртуальная машина Java предъявляет аналогичное требование к invokespecial инструкции, что аргумент получателя должен соответствовать как разрешенный метод <em>, так и< /em> текущему классу. Опять же, это требование реализуется путем сужения типа ведущего параметра до результирующего дескриптора метода. (См. спецификацию виртуальной машины Java, раздел 4.10.1.9.)

Виртуальная машина Java представляет конструкторы и блоки статического инициализатора как внутренние методы со специальными именами ("<init>" и "<clinit>"). Внутренний синтаксис инструкций вызова позволяет ссылаться на такие внутренние методы, как если бы они были обычными методами, но средство проверки байт-кода виртуальной машины Java отклоняет их. При поиске такого внутреннего метода будет получен объект NoSuchMethodException.

В некоторых случаях доступ между вложенными классами получается компилятором Java путем создания метода-оболочки для доступа к частному методу другого класса в том же объявлении верхнего уровня. Например, вложенный класс C.D может получить доступ к закрытым членам в других связанных классах, таких как C, C.D.Eили C.B, но компилятору Java может потребоваться создать методы-оболочки в этих связанных классах. В таких случаях объект в LookupC.E не сможет использовать эти закрытые члены. Обходным решением для этого ограничения является Lookup#in Lookup.in метод , который может преобразовать поиск C.E в любой из этих классов без специального повышения привилегий.

Доступ к данному объекту подстановки может быть ограничен в соответствии с его набором до подмножества элементов, обычно доступных для класса подстановки #lookupModes lookupModes. Например, #publicLookup publicLookup метод создает объект подстановки, которому разрешен доступ только к открытым членам в открытых классах. Метод #lookup lookup , чувствительный к вызывающей объекту, создает объект подстановки с полными возможностями относительно его класса вызывающих объектов для эмуляции всех поддерживаемых поведений байт-кода. Кроме того, Lookup#in Lookup.in метод может создать объект подстановки с меньшим количеством режимов доступа, чем исходный объект подстановки.

<p style="font-size:smaller;"> " privacc"><em>Обсуждение закрытого доступа:</em> Мы говорим, что подстановка имеет <em>private access</em> , если его #lookupModes режимы поиска включают возможность доступа к private членам. Как описано в соответствующих методах в других местах, только подстановки с частным доступом обладают следующими возможностями: <ul style="font-size:smaller;"><li>access private fields, methods, and constructors класса <поиска li>create method handles, которые вызывают чувствительные к вызывающей стороны методы, такие как<Class.forName li>create method handles , которые Lookup#findSpecial emulate invokespecial инструкции <li>избежать проверок доступа к пакету для классов, доступных для класса <поиска li>createLookup#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, MethodHandles.Lookup так и к API основного отражения (как показано в java.lang.Class Class).

При наличии диспетчера безопасности подстановки участников подлежат дополнительным проверкам. Диспетчеру безопасности выполняется от одного до трех вызовов. Любой из этих вызовов может отказать в доступе java.lang.SecurityException SecurityException, вызывая исключение . Определите smgr как диспетчер безопасности, lookc как класс поиска текущего объекта подстановки, как содержащий класс, refc в котором выполняется поиск члена, и defc как класс, в котором фактически определен член. Значение lookc определяется как <em>not present</em,> если текущий объект поиска не имеет закрытого доступа. Вызовы выполняются в соответствии со следующими правилами: <ul><li><b>Шаг 1:</b> Если lookc отсутствует, или если его загрузчик класса не совпадает с или предком загрузчика refcкласса , то SecurityManager#checkPackageAccess smgr.checkPackageAccess(refcPkg) вызывается , где refcPkg — пакет refc. <li><b>Шаг 2:</b> Если полученный элемент не является открытым и lookc отсутствует, вызывается SecurityManager#checkPermission smgr.checkPermission параметр with RuntimePermission("accessDeclaredMembers") . <li><b>Шаг 3:</b> Если полученный член не является открытым, а если lookc отсутствует, а если defc и refc отличаются, вызывается SecurityManager#checkPackageAccess smgr.checkPackageAccess(defcPkg) , где defcPkg — пакет defc. </ul> Проверки безопасности выполняются после прохождения других проверок доступа. Таким образом, приведенные выше правила предполагают открытый член или доступ к которому осуществляется из класса подстановки, который имеет права на доступ к члену.

<h1>"callsens"Методы<, чувствительные к> вызываемому объекту/h1> Небольшое количество методов Java имеет специальное свойство, называемое чувствительностью вызывающего объекта. Метод <em>, чувствительный к< вызывающей стороне/em> , может вести себя по-разному в зависимости от идентификатора его непосредственного вызывающего объекта.

Если запрашивается дескриптор метода для метода, чувствительного к вызывающей стороне, применяются общие правила поведения байт-кода, но класс подстановки учитывается особым образом. Результирующий дескриптор метода ведет себя так, как если бы он был вызван из инструкции, содержащейся в классе подстановки, поэтому метод, чувствительный к вызывающему объекту, обнаруживает класс подстановки. (Напротив, вызывающий дескриптор метода игнорируется.) Таким образом, в случае с методами, чувствительными к вызывающему объекту, различные классы подстановки могут привести к по-разному ведя дескрипторов методов.

В случаях, когда объектом подстановки является #publicLookup publicLookup(), или какой-либо другой объект поиска без закрытого доступа, класс подстановки игнорируется. В таких случаях невозможно создать дескриптор метода, зависящий от вызывающего объекта, доступ запрещен, а поиск завершается сбоем IllegalAccessExceptionс . <p style="font-size:smaller;"><em>Discussion:</em> Например, метод java.lang.Class#forName(String) Class.forName(x) , чувствительный к вызывающему объекту, может возвращать различные классы или вызывать различные исключения в зависимости от загрузчика класса, который его вызывает. Общедоступный поиск завершится ошибкой, так как нет разумного Class.forName способа определить поведение байт-кода. <p style="font-size:smaller;"> Если дескрипторы метода кэша приложения используются для широкого общего доступа, следует использовать для publicLookup() их создания. Если имеется поиск Class.forName, он завершится ошибкой, и приложение должно предпринять соответствующие действия в этом случае. Возможно, более поздний поиск, возможно, во время вызова метода начальной загрузки, может включать конкретное удостоверение вызывающего объекта, что делает метод доступным. <p style="font-size:smaller;"> Функция MethodHandles.lookup чувствительна к вызывающей стороны, что позволяет создать безопасную основу для поиска. Почти все другие методы в API JSR 292 используют объекты поиска для проверка запросов на доступ.

Документация по Java для java.lang.invoke.MethodHandles.Lookup.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

Поля

Package
Устаревшие..

Одноразрядная маска, представляющая package доступ (доступ по умолчанию), которая может влиять на результат .#lookupModes lookupModes

Private
Устаревшие..

Одноразрядная маска, представляющая private доступ, которая может влиять на результат #lookupModes lookupModes.

Protected
Устаревшие..

Одноразрядная маска, представляющая protected доступ, которая может влиять на результат #lookupModes lookupModes.

Public
Устаревшие..

Одноразрядная маска, представляющая public доступ, которая может влиять на результат #lookupModes lookupModes.

Свойства

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
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, предоставляющий доступ к статическому полю name типа type , объявленному в классе типа decl.

FindVarHandle(Class, String, Class)

Создает Объект VarHandle, предоставляющий доступ к нестатическому полю name типа type , объявленному в классе типа recv.

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, предоставляющий доступ к отраженному полю f типа T , объявленному в классе типа R.

UnregisterFromRuntime()

Объект <или em<> подстановки —>это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа.

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

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

(Унаследовано от Object)
Wait(Int64)

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

(Унаследовано от Object)
Wait(Int64, Int32)

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> 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<> подстановки —>это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа.

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