Поделиться через


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 объекте соответствуют всем основным вариантам использования методов, конструкторов и полей. Каждый дескриптор метода, созданный методом фабрики, является функциональным эквивалентом определенного <поведения< 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и aFieldaConstructor стоять на отражающих объектах, соответствующих заданным элементам.

В случаях, когда заданный член имеет переменную 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
Устаревшие..

Одно битовая маска, 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, 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> — это фабрика для создания дескрипторов методов, когда для создания требуется проверка доступа.

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