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
- Наследование
- Атрибуты
Комментарии
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. Эти преобразования являются довольно общими и включают такие шаблоны, как преобразование #asType, #bindTo вставка, java.lang.invoke.MethodHandles#dropArguments и подстановка java.lang.invoke.MethodHandles#filterArguments.
<Дескриптора> метода 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> A Java именование invokeExact выражений метода или invoke может вызывать дескриптор метода из исходного кода Java. С точки зрения исходного кода эти методы могут принимать любые аргументы и их результат можно привести к любому типу возвращаемого значения. Формально это достигается путем предоставления методам Object вызова возвращаемых типов и аргументов переменной arityObject, но у них есть дополнительное качество, называемое <>полиморфизмом< подписи или em>, которое соединяет эту свободу вызова непосредственно к стеку выполнения JVM.
Как и в случае с виртуальными методами, вызовы на уровне источника и invokeExactinvoke компиляция в инструкцию invokevirtual . Более необычно компилятор должен записать фактические типы аргументов и не выполнять преобразования вызовов метода для аргументов. Вместо этого он должен отправлять их в стек в соответствии с собственными неконвертируемыми типами. Сам объект дескриптора метода отправляется в стек перед аргументами. Затем компилятор вызывает дескриптор метода с дескриптором символьного типа, описывающего аргумент и типы возвращаемых значений.
Чтобы выдать полный дескриптор символьного типа, компилятор должен также определить тип возвращаемого значения. Это основано на приведения выражения вызова метода, если имеется одно или другое, если вызов является выражением или Object другимvoid, если вызов является оператором. Приведение может быть к примитивному типу (но не void).
В качестве углового регистра неадресованный null аргумент получает дескриптор java.lang.Voidсимвольного типа. Неоднозначность с типом Void безвредна, так как нет ссылок типа Void , кроме ссылки null.
<Метод h1>дескриптор вызова</h1> При первом invokevirtual выполнении инструкции он связан, символически разрешая имена в инструкции и проверяя, является ли вызов метода статически законным. Это верно для вызовов invokeExact и invoke. В этом случае дескриптор символьного типа, создаваемый компилятором, проверяется правильность синтаксиса и имена, которые он содержит, разрешаются. Таким образом, инструкция, invokevirtual которая вызывает дескриптор метода, всегда будет связываться, если дескриптор символьного типа синтаксически сформирован и типы существуют.
invokevirtual При выполнении привязки тип дескриптора метода получения сначала проверяется JVM, чтобы убедиться, что он соответствует дескриптору символьного типа. Если совпадение типов завершается ошибкой, это означает, что вызывающий метод не присутствует в вызываемом дескрипторе отдельного метода.
В случае invokeExactдескриптора типа вызова (после разрешения имен символьного типа) должен точно соответствовать типу метода дескриптора принимающего метода. В случае обычного нетекстного дескриптора invokeразрешенного типа должен быть допустимым аргументом метода получателя #asType asType . Таким образом, обычный invoke является более разрешительным, чем invokeExact.
После сопоставления типов вызов invokeExact непосредственно и немедленно вызывает базовый метод дескриптора метода (или другое поведение, так как это может быть).
Вызов обычного invoke работает так же, как вызов invokeExact, если дескриптор символьного типа, указанный вызывающим оператором, точно соответствует собственному типу дескриптора метода. Если имеется несоответствие типов, invoke пытается настроить тип дескриптора метода получения, как если бы вызовом #asType asType, получить точно вызываемый дескриптор M2метода. Это позволяет более мощное согласование типа метода между вызывающим и вызывающим.
(<em Примечание.>/em<> Измененный дескриптор M2 метода не является видимым напрямую, и реализации поэтому не требуются для материализации.)
<H1>Проверка< вызова/h1> В типичных программах обработка типа метода обычно будет успешно выполнена. Но если совпадение завершается сбоем, JVM вызовет WrongMethodTypeExceptionлибо напрямую (в случае invokeExact) либо косвенно, как если бы не удалось вызвать asType (в случае invoke).
Таким образом, несоответствие типа метода, которое может отображаться как ошибка компоновки в статической типизированной программе может отображаться как динамический WrongMethodTypeException в программе, которая использует дескриптор методов.
Так как типы методов содержат объекты live Class , сопоставление типов методов учитывает имена типов и загрузчики классов. Таким образом, даже если дескриптор метода создается в одном загрузчике M класса и используется в другомL1, вызовы дескриптора L2 символьного типа вызывающего метода являются типобезопасным, так как L2дескриптор символьного типа вызываемого метода сопоставляется с дескриптором символьного типа вызываемого метода, как разрешено вL1. Разрешение L1 происходит при M создании и назначении его типа, а разрешение происходит при L2 связывании инструкции invokevirtual .
Помимо проверки дескрипторов типов, возможность дескриптора метода вызывать его базовый метод неограничен. Если дескриптор метода формируется в недоступном методе классом, имеющим доступ к такому методу, результирующий дескриптор может использоваться в любом месте любым вызывающим лицом, получающим ссылку на него.
В отличие от API основного отражения, где доступ проверяется каждый раз при вызове отражающего метода, проверка доступа к методу выполняется при создании дескриптора метода. В случае ldc (см. ниже), проверка доступа выполняется в рамках связывания записи пула констант, лежащей в основе дескриптора метода константы.
Таким образом, обработка методов, не являющихся открытыми, или методов в недоступных классах, обычно должна храниться в секрете. Они не должны передаваться в ненадежный код, если их использование из ненадежного кода не будет безвредным.
<Метод h1>handle create</h1> Java code может создать дескриптор метода, который напрямую обращается к любому методу, конструктору или полю, доступному для этого кода. Это делается с помощью отражающего API на основе возможностей, называемого java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup Например, статический дескриптор метода можно получить из java.lang.invoke.MethodHandles.Lookup#findStatic Lookup.findStatic. Существуют также методы преобразования из объектов API core Reflection, таких как java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect.
Как и классы и строки, методы обрабатываются, соответствующие доступным полям, методам и конструкторам, также могут быть представлены непосредственно в пуле констант файла класса в виде констант, которые загружаются байт-кодами ldc . Новый тип записи пула констант, ссылается непосредственно на связанную CONSTANT_MethodHandleCONSTANT_MethodrefCONSTANT_InterfaceMethodref или CONSTANT_Fieldrefконстантную запись пула. (Полные сведения о константах дескрипторах методов см. в разделах 4.4.8 и 5.4.3.5 спецификации виртуальной машины Java.)
Дескрипторы методов, созданные подстановками или константными нагрузками из методов или конструкторов с битом модификатора переменной (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> Each из указанных выше вызовов invokeExact или просто invoke создает одну инструкцию invokevirtual с дескриптором символьного типа, указанным в следующем комментарии. В этих примерах вспомогательный метод assertEquals считается методом, который вызывает java.util.Objects#equals(Object,Object) Objects.equals его аргументы, и утверждает, что результат является истинным.
<h1>Exceptions</h1> — методы invokeExact и invoke объявляются для создания java.lang.Throwable Throwable, то есть нет статического ограничения на то, что дескриптор метода может вызывать. Так как JVM не отличается от проверенных и снятых исключений (кроме их класса, конечно), нет определенного влияния на фигуру байт-кода от исправленных исключений для вызовов методов. Но в Java исходном коде методы, выполняющие вызовы методов, должны либо явно создаватьThrowable, либо перехватывать все бросаемые объекты локально, повторно создавать только те, которые являются законными в контексте, и упаковывать те, которые являются незаконными.
<h1>"sigpoly">Сигнатуризм</h1> Необычное поведение invokeExact компиляции и компоновки и равнины invoke ссылается на термин <em>signature polymorphism</em>. Как определено в спецификации языка Java, полиморфный метод сигнатуры является одним из способов работы с любым из широкого диапазона сигнатур вызовов и возвращаемых типов.
В исходном коде вызов полиморфного метода подписи компилируется независимо от запрошенного дескриптора символьного типа. Как обычно, компилятор Java выдает invokevirtual инструкцию с заданным дескриптором символьного типа для именованного метода. Необычной частью является то, что дескриптор символьного типа является производным от фактического аргумента и возвращаемых типов, а не из объявления метода.
Когда JVM обрабатывает байт-код, содержащий полиморфные вызовы подписи, он успешно связывает любой такой вызов независимо от дескриптора символьного типа. (Чтобы сохранить безопасность типов, JVM будет защищать такие вызовы с подходящими динамическими проверками типов, как описано в другом месте.)
Генераторы байт-кода, включая внутренний конец компилятора, требуются для выдачи дескрипторов символьного типа нетрансформированных символьных типов для этих методов. Средства, определяющие символьную компоновку, необходимы для принятия таких нетрансформированных дескрипторов без ошибок компоновки.
<H1>Interoperation между дескрипторами методов и API< основного отражения/h1> С помощью методов фабрики java.lang.invoke.MethodHandles.Lookup Lookup в API любой член класса, представленный объектом API core Reflection, можно преобразовать в дескриптор метода, эквивалентный по поведению. Например, отражение 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>Interoperation между дескрипторами метода и Java generics</h1> A можно получить в методе, конструкторе или поле, объявленном с Java универсальных типов. Как и в СЛУЧАЕ с API отражения ядра, тип дескриптора метода будет создан на основе стирения типа исходного уровня. При вызове дескриптора метода типы его аргументов или возвращаемый тип приведения значений могут быть универсальными типами или экземплярами типов. Если это происходит, компилятор заменит эти типы своими эраустрами при создании дескриптора символьного типа для инструкции invokevirtual .
Дескриптор методов не представляет их типы функций с точки зрения Java параметризованных (универсальных) типов, так как существует три несоответствия между типами функций и параметризованными Java типами. <ul><li>Method types range over all возможно arities, от без аргументов до максимального числа разрешенных аргументов. Универсальные шаблоны не являются вариативными и поэтому не могут представлять это.<Типы методов /li><>могут указывать аргументы примитивных типов, которые Java универсальные типы не могут выполнять диапазон.<Функции /li><>более высокого порядка для дескрипторов методов (комбинаторы) часто являются универсальными для широкого спектра типов функций, включая несколько arities. Невозможно представить такую универсальность с параметром типа Java.</li></ul>
<h1>"maxarity">Arity limit</h1> JVM накладывает на все методы и конструкторы любого вида абсолютный предел в 255 стеках аргументов. Это ограничение может быть более строгим в некоторых случаях: <число аргументов ul><li>A long или double аргументов (в целях ограничений arity) в качестве двух слотов аргументов.
<li>Нестатический метод использует дополнительный аргумент для объекта, на котором вызывается метод.
<li>Конструктор использует дополнительный аргумент для создаваемого объекта.
<li>С дескриптором метода Метод s invoke (или другой метод сигнатурной полиморфной) является не-виртуальным, он использует дополнительный аргумент для самого дескриптора метода, помимо любого объекта, отличного от виртуального приемника.
</ul> Эти ограничения подразумевают, что определенные дескрипторы методов не могут быть созданы, исключительно из-за ограничения JVM в аргументах с накоплением. Например, если статический метод JVM принимает ровно 255 аргументов, для него нельзя создать дескриптор метода. Попытки создания дескрипторов методов с невозможными типами методов приводят к возникновению IllegalArgumentExceptionошибки. В частности, дескриптор метода Тип s не должен иметь arity от точного максимума 255.
Java документации по java.lang.invoke.MethodHandle.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя. | Описание |
|---|---|
| MethodHandle(IntPtr, JniHandleOwnership) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. |
Свойства
| Имя. | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| IsVarargsCollector |
Определяет, поддерживает ли этот дескриптор метода вызовы переменных #asVarargsCollector. |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| JniPeerMembers |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. |
| ThresholdType |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. |
Методы
| Имя. | Описание |
|---|---|
| AsCollector(Class, Int32) |
<Делает дескриптор метода em>array-collect</em>, который принимает заданное число конечных позиционных аргументов и собирает их в аргумент массива. |
| AsCollector(Int32, Class, Int32) |
<Делает дескриптор метода em>array-collect</em>, который принимает заданное количество позиционных аргументов, начиная с заданной позиции, и собирает их в аргумент массива. |
| AsFixedArity() |
<Создает дескриптор метода em>fixed arity</em>, который в противном случае эквивалентен текущему дескриптору метода. |
| AsSpreader(Class, Int32) |
Делает дескриптор метода em-spread<>/em<, который принимает конечный >аргумент массива и распространяет его элементы в виде позиционных аргументов. |
| AsSpreader(Int32, Class, Int32) |
<Делает дескриптор метода em-spread></em>, который принимает аргумент массива в заданной позиции и распространяет его элементы в качестве позиционных аргументов вместо массива. |
| AsType(MethodType) |
Создает дескриптор метода адаптера, который адаптирует тип текущего дескриптора метода к новому типу. |
| AsVarargsCollector(Class) |
< >Делает адаптер em переменной arity</em>, который может принимать любое количество конечных позиционных аргументов и собирать их в аргумент массива. |
| BindTo(Object) |
Привязывает значение |
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| Equals(Object) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| Invoke(Object[]) |
Вызывает дескриптор метода, разрешая дескриптор типа вызывающего объекта и при необходимости выполняя преобразования для аргументов и возвращаемых значений. |
| InvokeExact(Object[]) |
Вызывает дескриптор метода, разрешая дескриптор типа вызывающего объекта, но требуя точного сопоставления типов. |
| InvokeWithArguments(IList<Object>) |
Выполняет вызов переменной arity, передавая аргументы в заданный массив в дескриптор метода, как будто через нетекст |
| InvokeWithArguments(Object[]) |
Выполняет вызов переменной arity, передав аргументы в заданном списке дескриптор метода, как будто через неисправный |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| Type() |
Сообщает тип дескриптора этого метода. |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| WithVarargs(Boolean) |
Адаптирует этот дескриптор метода, чтобы быть #asVarargsCollector переменной arity, если логический флаг имеет значение true, в противном случае #asFixedArity фиксированной arity. |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| IJavaPeerable.Finalized() |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. (Унаследовано от JavaObject) |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Дескриптор метода является типизированной, непосредственной ссылкой на базовый метод, конструктор, поле или аналогичную низкоуровневую операцию с необязательными преобразованиями аргументов или возвращаемыми значениями. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |