MethodHandle Класс

Определение

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

[Android.Runtime.Register("java/lang/invoke/MethodHandle", ApiSince=26, DoNotGenerateAcw=true)]
public abstract class MethodHandle : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/MethodHandle", ApiSince=26, DoNotGenerateAcw=true)>]
type MethodHandle = class
    inherit Object
Наследование
MethodHandle
Атрибуты

Комментарии

Дескриптор метода — это типизированные, непосредственно исполняемые ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений. Эти преобразования являются довольно общими и включают такие шаблоны, как преобразование #asType, вставка #bindTo, удаление java.lang.invoke.MethodHandles#dropArguments и подстановка java.lang.invoke.MethodHandles#filterArguments.

<h1>Содержимое дескриптора< метода/h1> Дескрипторы методов динамически и строго типизированы в соответствии с их параметрами и возвращаемыми типами. Они не различаются по имени или определяющему классу базовых методов. Дескриптор метода должен вызываться с помощью дескриптора символьного типа, который соответствует дескриптором собственного #type дескриптора типа метода.

Каждый дескриптор метода передает свой дескриптор #type type типа через метод доступа. Этот дескриптор типа является java.lang.invoke.MethodType MethodType объектом, структура которого представляет собой последовательность классов, один из которых является типом возвращаемого значения метода (или void.class , если его нет).

Тип дескриптора метода управляет типами вызовов, которые он принимает, и типами преобразований, которые к нему применяются.

Дескриптор метода содержит пару специальных методов вызова с именем #invokeExact invokeExact и #invoke invoke. Оба метода вызова обеспечивают прямой доступ к базовому методу дескриптора метода, конструктору, полю или другой операции, измененной преобразованиями аргументов и возвращаемых значений. Оба вызова принимают вызовы, которые точно соответствуют собственному типу дескриптора метода. Простой, нетязаимый вызывающий объект также принимает диапазон других типов вызовов.

Дескрипторы методов являются неизменяемыми и не имеют видимого состояния. Конечно, они могут быть привязаны к базовым методам или данным, которые демонстрируют состояние. Что касается модели памяти Java, любой дескриптор метода будет вести себя так, как если бы все его (внутренние) поля являются конечными переменными. Это означает, что любой дескриптор метода, видимый приложению, всегда будет полностью сформирован. Это верно, даже если дескриптор метода публикуется через общую переменную в гонке данных.

Дескрипторы методов не могут быть подклассами пользователя. Реализации могут (или не могут) создавать внутренние подклассы MethodHandle , которые могут быть видны с помощью java.lang.Object#getClass Object.getClass операции. Программист не должен делать выводы о дескрипторе метода из своего конкретного класса, так как иерархия классов дескрипторов метода (если таковой имеется) может меняться время от времени или в разных реализациях от разных поставщиков.

<h1>Компиляция< дескриптора метода/h1> Именование выражений invokeExact вызова метода Java или invoke может вызывать дескриптор метода из исходного кода Java. С точки зрения исходного кода эти методы могут принимать любые аргументы, а их результат можно привести к любому возвращаемому типу. Формально это достигается путем предоставления методов Object вызова возвращаемых типов и переменных аргументов arityObject, но они имеют дополнительное качество, называемое <полиморфизмом< сигнатуры em>,> которое связывает эту свободу вызова непосредственно со стеком выполнения виртуальной машины Java.

Как и в случае с виртуальными методами, вызовы invokeExact исходного уровня и invoke компиляция в инструкцию invokevirtual . Что более необычно, компилятор должен записывать фактические типы аргументов и не может выполнять преобразования вызова метода в аргументах. Вместо этого он должен помещать их в стек в соответствии с их собственными неконвертированных типов. Сам объект дескриптора метода передается в стек перед аргументами. Затем компилятор вызывает дескриптор метода с символьным дескриптором типа, который описывает аргумент и возвращаемые типы.

Чтобы выдать полный дескриптор символьного типа, компилятор также должен определить тип возвращаемого значения. Это основано на приведение к выражению вызова метода, если оно существует, или если Object вызов является выражением, или в противном случае void , если вызов является оператором . Приведение может быть к примитивному типу (но не void).

В качестве углового регистра аргументу без рассылки null присваивается дескриптор символьного java.lang.Voidтипа . Неоднозначность с типом Void безопасена, так как нет ссылок на тип Void , кроме пустой ссылки.

<h1>Вызов дескриптора< метода/h1> При первом invokevirtual выполнении инструкции она связывается путем символического разрешения имен в инструкции и проверки того, что вызов метода является статически допустимым. Это относится к вызовам invokeExact и invoke. В этом случае дескриптор символьного типа, выдаваемый компилятором, проверяется на правильный синтаксис, а содержащиеся в нем имена разрешаются. Таким образом, инструкция, invokevirtual которая вызывает дескриптор метода, всегда будет связываться, если дескриптор символьного типа синтаксически правильно сформирован и типы существуют.

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

В случае дескриптор типа вызова (после разрешения имен символьных invokeExactтипов) должен точно соответствовать типу метода дескриптора принимающего метода. В случае с обычными, неточными invokeдескриптор разрешенного типа должен быть допустимым аргументом метода получателя #asType asType . Таким образом, plain invoke является более разрешительным, чем invokeExact.

После сопоставления типов вызов invokeExact непосредственно и немедленно вызывает базовый метод дескриптора метода (или другое поведение, в соответствии с ситуацией).

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

(<Примечание.></em>. Измененный дескриптор M2 метода напрямую не наблюдается, поэтому реализации не требуются для его материализации.)

<h1>Проверка< вызова/h1> В типичных программах сопоставление типов дескрипторов метода обычно выполняется успешно. Но если совпадение завершается сбоем, виртуальная WrongMethodTypeExceptionмашина JVM вызовет либо напрямую (в случае invokeExact) либо косвенно, как если бы не удалось вызвать asType (в случае invoke).

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

Поскольку типы методов содержат "динамические" Class объекты, при сопоставлении типов методов учитываются как имена типов, так и загрузчики классов. Таким образом, даже если дескриптор M метода создается в одном загрузчике L1 класса и используется в другом L2, вызовы дескриптора метода являются типобезопасны, так как символьный дескриптор типа вызывающего объекта, разрешенный в L2, сопоставляется с дескриптором символьного типа исходного вызываемого метода, как разрешено в L1. Разрешение в L1 происходит при M создании и присвоении его типа, а разрешение в L2 — при связывании инструкции invokevirtual .

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

В отличие от API отражения Core, где доступ проверяется при каждом вызове отражающего метода, проверка доступа к дескриптору метода выполняется при создании дескриптора метода. В случае ldc (см. ниже) проверка доступа выполняется в рамках связывания записи пула констант, лежащей в основе дескриптора метода константы.

Таким образом, дескрипторные методы или методы в не открытых классах, как правило, должны храниться в секрете. Они не должны передаваться в ненадежный код, если только их использование из ненадежного кода не будет безвредным.

<h1>Создание дескриптора< метода/код h1> Java может создать дескриптор метода, который напрямую обращается к любому методу, конструктору или полю, доступным для этого кода. Это делается с помощью отражающего API на основе возможностей, который называется java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup , например, дескриптор статического метода можно получить из java.lang.invoke.MethodHandles.Lookup#findStatic Lookup.findStatic. Существуют также методы преобразования из объектов API отражения Core, таких как java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect.

Как и классы и строки, дескрипторы методов, соответствующие доступным полям, методам и конструкторам, также могут быть представлены непосредственно в пуле констант файла класса в виде констант для загрузки с помощью ldc байт-кодов. Новый тип записи CONSTANT_MethodHandleпула констант ( ) ссылается непосредственно на связанную CONSTANT_Methodrefзапись , CONSTANT_InterfaceMethodrefили CONSTANT_Fieldref константного пула. (Полные сведения о константах обработки метода см. в разделах 4.4.8 и 5.4.3.5 спецификации виртуальной машины Java.)

Дескрипторы методов, созданные подстантовками или постоянными нагрузками из методов или конструкторов с битом модификатора переменной arity (0x0080), имеют соответствующую переменную arity, как если бы они были определены с помощью #asVarargsCollector asVarargsCollector.

Ссылка на метод может ссылаться на статический или нестатический метод. В нестатическом случае тип дескриптора метода включает явный аргумент получателя, добавленный перед любыми другими аргументами. В типе дескриптора метода исходный аргумент получателя вводится в соответствии с классом, в котором был первоначально запрошен метод. (Например, если дескриптор нестатических методов получен с помощью ldc, типом получателя является класс с именем в записи пула констант.)

Константы дескриптора метода подлежат той же проверке доступа во время компоновки, что и соответствующие инструкции по байт-коду, и ldc инструкция выдает соответствующие ошибки компоновки, если поведение байт-кода вызовет такие ошибки.

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

При вызове дескриптора метода к виртуальному методу метод всегда выполняется поиск в приемнике (т. е. первый аргумент).

Можно также создать дескриптор не виртуальных методов для конкретной реализации виртуального метода. Они не выполняют виртуальный поиск в зависимости от типа получателя. Такой дескриптор метода имитирует влияние инструкции invokespecial на тот же метод.

<h1>Примеры< использования/h1> Вот несколько примеров использования: <blockquote>

{@code
            Object x, y; String s; int i;
            MethodType mt; MethodHandle mh;
            MethodHandles.Lookup lookup = MethodHandles.lookup();
            // mt is (char,char)String
            mt = MethodType.methodType(String.class, char.class, char.class);
            mh = lookup.findVirtual(String.class, "replace", mt);
            s = (String) mh.invokeExact("daddy",'d','n');
            // invokeExact(Ljava/lang/String;CC)Ljava/lang/String;
            assertEquals(s, "nanny");
            // weakly typed invocation (using MHs.invoke)
            s = (String) mh.invokeWithArguments("sappy", 'p', 'v');
            assertEquals(s, "savvy");
            // mt is (Object[])List
            mt = MethodType.methodType(java.util.List.class, Object[].class);
            mh = lookup.findStatic(java.util.Arrays.class, "asList", mt);
            assert(mh.isVarargsCollector());
            x = mh.invoke("one", "two");
            // invoke(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
            assertEquals(x, java.util.Arrays.asList("one","two"));
            // mt is (Object,Object,Object)Object
            mt = MethodType.genericMethodType(3);
            mh = mh.asType(mt);
            x = mh.invokeExact((Object)1, (Object)2, (Object)3);
            // invokeExact(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            assertEquals(x, java.util.Arrays.asList(1,2,3));
            // mt is ()int
            mt = MethodType.methodType(int.class);
            mh = lookup.findVirtual(java.util.List.class, "size", mt);
            i = (int) mh.invokeExact(java.util.Arrays.asList(1,2,3));
            // invokeExact(Ljava/util/List;)I
            assert(i == 3);
            mt = MethodType.methodType(void.class, String.class);
            mh = lookup.findVirtual(java.io.PrintStream.class, "println", mt);
            mh.invokeExact(System.out, "Hello, world.");
            // invokeExact(Ljava/io/PrintStream;Ljava/lang/String;)V
            }

</blockquote> Каждый из приведенных выше вызовов invokeExact или простой invoke создает одну инструкцию invokevirtual с дескриптором символьного типа, указанным в следующем комментарии. В этих примерах вспомогательный метод assertEquals считается методом, который вызывает java.util.Objects#equals(Object,Object) Objects.equals для своих аргументов и подтверждает, что результат является истинным.

<h1>Exceptions</h1> Методы invokeExact и invoke объявляются для вызова java.lang.Throwable Throwable, т. е. нет статических ограничений на то, что может вызвать дескриптор метода. Так как виртуальная машина Java не различает проверенные и непроверенные исключения (кроме, конечно, по их классу), не оказывает особого влияния на фигуру байт-кода от ассписания проверенных исключений для вызовов дескриптора метода. Но в исходном коде Java методы, которые выполняют вызовы дескриптора методов, должны либо явно выдавать Throwable, либо должны перехватывать все бросаемые объекты локально, повторно перенося только те, которые являются допустимыми в контексте, и упаковывать недопустимые.

<h1>"sigpoly">Полиморфизм< подписи/h1> На необычное поведение invokeExact компиляции и компоновки и plain invoke ссылается термин <em>signature polymorphism</em>. Как определено в спецификации языка Java, полиморфный метод сигнатуры — это метод, который может работать с любым из широкого спектра сигнатур вызовов и типов возвращаемых значений.

В исходном коде вызов полиморфного метода сигнатуры будет компилироваться независимо от запрошенного дескриптора символьного типа. Как обычно, компилятор Java выдает invokevirtual инструкцию с заданным дескриптором символьного типа для именованного метода. Необычной частью является то, что дескриптор символьного типа является производным от фактического аргумента и возвращаемых типов, а не из объявления метода.

Когда виртуальная машина Java обрабатывает байт-код, содержащий полиморфные вызовы сигнатуры, она успешно связывает любой такой вызов, независимо от дескриптора символьного типа. (Чтобы сохранить безопасность типа, виртуальная машина Java будет защищать такие вызовы с помощью подходящих динамических проверок типов, как описано в других местах.)

Генераторы байт-кода, включая внутренний элемент компилятора, должны выдавать дескрипторы символьных типов без преобразования для этих методов. Средства, определяющие символьную компоновку, должны принимать такие дескрипторы без передачи ошибок компоновки.

<h1>Взаимодействие между дескрипторами методов и API< отражения core/h1> С помощью фабричные методы в java.lang.invoke.MethodHandles.Lookup Lookup API любой член класса, представленный объектом API отражения Core, можно преобразовать в дескриптор метода, эквивалентный поведению. Например, отражающий объект java.lang.reflect.Method Method можно преобразовать в дескриптор метода с помощью java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect. Результирующий дескриптор метода обычно обеспечивает более прямой и эффективный доступ к базовым членам класса.

В особом случае, когда API отражения ядра используется для просмотра полиморфных методов invokeExact сигнатур или простых invoke в этом классе, они отображаются как обычные неполиморфные методы. На их отражающий внешний вид, по мнению java.lang.Class#getDeclaredMethod Class.getDeclaredMethod, не влияет их особое состояние в этом API. Например, будет сообщать именно те биты модификаторов, java.lang.reflect.Method#getModifiers Method.getModifiers которые необходимы для любого аналогично объявленного метода, включая в данном случае native и varargs биты.

Как и в случае с любым отраженным методом, эти методы (при отражении) могут вызываться через java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke. Однако такие отражающие вызовы не приводят к вызовам дескрипторов метода. Такой вызов, если передан обязательный аргумент (один, тип Object[]), проигнорирует аргумент и вызовет UnsupportedOperationExceptionисключение .

Так как invokevirtual инструкции могут вызывать дескрипторы методов в любом дескрипторе символьного типа, это отражающее представление конфликтует с обычным представлением этих методов через байт-коды. Таким образом, эти два собственных метода при отражательном просмотре с помощью Class.getDeclaredMethodмогут рассматриваться только как заполнители.

Чтобы получить метод вызова для определенного дескриптора типа, используйте java.lang.invoke.MethodHandles#exactInvoker MethodHandles.exactInvoker, или java.lang.invoke.MethodHandles#invoker MethodHandles.invoker. java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual API также может возвращать дескриптор метода для вызова invokeExact или обычного invokeметода для любого указанного дескриптора типа .

<h1>Взаимодействие между дескрипторами методов и универсальными шаблонами< Java/h1> Дескриптор метода можно получить в методе, конструкторе или поле, объявленном с помощью универсальных типов Java. Как и в случае с API отражения ядра, тип дескриптора метода будет создан на основе стирения типа исходного уровня. При вызове дескриптора метода типы его аргументов или возвращаемый тип приведения значений могут быть универсальными типами или экземплярами типов. В этом случае компилятор заменит эти типы на их стирает при создании дескриптора символьного типа для инструкции invokevirtual .

Дескрипторы методов не представляют свои функциональные типы с точки зрения параметризованных (универсальных) типов Java, так как существует три несоответствия между функциональными типами и параметризованными типами Java. <Типы метода ul><li>варьируются по всем возможным arities, от отсутствия аргументов до максимального числа допустимых аргументов. Универсальные шаблоны не являются переменными и поэтому не могут представлять это.<Типы метода /li><li>могут указывать аргументы примитивных типов, которые не могут быть диапазоном универсальных типов Java.</li><li>li Функции более высокого порядка над дескрипторами методов (комбинаторами) часто являются универсальными для широкого спектра типов функций, включая функции нескольких типов. Невозможно представить такую универсальность с помощью параметра типа Java.</li></ul>

<h1>"maxarity">Arity limits</h1> Виртуальная машина Java накладывает на все методы и конструкторы любого вида абсолютное ограничение в 255 аргументов с накоплением. Это ограничение может показаться более строгим в некоторых случаях: <ul><li>A long или double число аргументов (для целей ограничений arity) в качестве двух слотов аргументов. <li>Нестатический метод использует дополнительный аргумент для объекта, для которого вызывается метод . <li>Конструктор использует дополнительный аргумент для создаваемого объекта. <li>Так как метод дескриптор’ Метод s invoke (или другой полиморфный метод сигнатуры) не является виртуальным, он использует дополнительный аргумент для самого дескриптора метода в дополнение к любому объекту приемника, не являющегося виртуальным. </ul> . Эти ограничения подразумевают, что определенные дескрипторы методов не могут быть созданы исключительно из-за ограничения виртуальной машины Java для аргументов с накоплением. Например, если статический метод виртуальной машины Java принимает ровно 255 аргументов, для него невозможно создать дескриптор метода. Попытки создать дескрипторы методов с невозможными типами методов приводят к .IllegalArgumentException В частности, дескриптор метода’ Тип s не должен иметь точный максимум 255.

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

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

Конструкторы

MethodHandle(IntPtr, JniHandleOwnership)

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

Свойства

Class

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

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

Дескриптор базового экземпляра Android.

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

Определяет, поддерживает ли этот дескриптор метода #asVarargsCollector вызовы переменной arity.

JniIdentityHashCode

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

PeerReference

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

ThresholdType

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

Методы

AsCollector(Class, Int32)

Создает дескриптор <метода сбора>< массива или метода em>, который принимает заданное количество конечных позиционных аргументов и собирает их в аргумент массива.

AsCollector(Int32, Class, Int32)

Создает дескриптор <метода сбора< массива или>em>, который принимает заданное количество позиционных аргументов, начиная с заданной позиции, и собирает их в аргумент массива.

AsFixedArity()

Создает фиксированный дескриптор <метода arity></em>, который в противном случае эквивалентен текущему дескриптору метода.

AsSpreader(Class, Int32)

Создает дескриптор <метода распространения>< массива или em>, который принимает аргумент массива в конечной части и распределяет его элементы как позиционные аргументы.

AsSpreader(Int32, Class, Int32)

Создает дескриптор <метода em-spread-spread></em>, который принимает аргумент массива в заданной позиции и распределяет его элементы в качестве позиционных аргументов вместо массива.

AsType(MethodType)

Создает дескриптор метода адаптера, который адаптирует тип текущего дескриптора метода к новому типу.

AsVarargsCollector(Class)

Создает адаптер arity</em> переменной <em>, который может принимать любое количество конечных позиционных аргументов и собирать их в аргумент массива.

BindTo(Object)

Привязывает значение x к первому аргументу дескриптора метода, не вызывая его.

Clone()

Создает и возвращает копию этого объекта.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Указывает, равен ли какой-то другой объект этому объекту.

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

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
Invoke(Object[])

Вызывает дескриптор метода, разрешая любой дескриптор типа вызывающего объекта и при необходимости выполняя преобразования аргументов и возвращаемых значений.

InvokeExact(Object[])

Вызывает дескриптор метода, разрешая любой дескриптор типа вызывающего объекта, но требуя точного соответствия типа.

InvokeWithArguments(IList<Object>)

Выполняет вызов переменной arity, передавая аргументы в заданном массиве дескриптору метода, как если бы через неточность #invoke invoke с сайта вызова, в котором упоминается только тип Object, а arity — это длина массива аргументов.

InvokeWithArguments(Object[])

Выполняет вызов переменной arity, передавая аргументы из заданного списка дескриптору метода, как если бы с помощью нетока #invoke invoke с сайта вызова, на котором упоминается только тип Object, а arity — это длина списка аргументов.

JavaFinalize()

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

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

Пробуждает один поток, ожидающий монитора этого объекта.

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

Пробуждает все потоки, ожидающие на мониторе этого объекта.

(Унаследовано от Object)
SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
ToArray<T>()

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

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

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

Сообщает тип дескриптора этого метода.

UnregisterFromRuntime()

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.><

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

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

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

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

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

Адаптирует этот дескриптор метода для #asVarargsCollector переменной arity, если логический флаг имеет значение true, в противном случае #asFixedArity фиксированной arity.

Явные реализации интерфейса

IJavaPeerable.Disposed()

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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

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

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

GetJniTypeName(IJavaPeerable)

Дескриптор метода — это типизированный, прямой исполняемый объект ссылки на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемых значений.

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