MethodHandles.SpreadInvoker(MethodType, Int32) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создает дескриптор метода, который вызывает любой дескриптор метода заданного type
объекта с заданным числом конечных аргументов, замененных одним конечным Object[]
массивом.
[Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? SpreadInvoker (Java.Lang.Invoke.MethodType? type, int leadingArgCount);
[<Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member SpreadInvoker : Java.Lang.Invoke.MethodType * int -> Java.Lang.Invoke.MethodHandle
Параметры
- type
- MethodType
требуемый тип целевого объекта
- leadingArgCount
- Int32
число фиксированных аргументов, передаваемых в целевой объект без изменений
Возвращаемое значение
дескриптор метода, подходящий для вызова любого дескриптора метода заданного типа.
- Атрибуты
Комментарии
Создает дескриптор метода, который вызывает любой дескриптор метода заданного type
объекта с заданным числом конечных аргументов, замененных одним конечным Object[]
массивом. Результирующий вызывающий объект будет дескриптором метода со следующими аргументами: ul>li один целевой MethodHandle
<li>ноль или более начальных значений (подсчитывается по leadingArgCount
) <li>массивObject[]
, содержащий конечные аргументы </ul><<>
Вызывающий объект будет вызывать свой целевой объект, как вызов MethodHandle#invoke invoke
с указанным type
. То есть, если целевой объект точно соответствует заданному type
, он будет вести себя как invokeExact
; в противном случае он будет вести себя так, как если бы MethodHandle#asType asType
использовался для преобразования целевого объекта в требуемый type
.
Тип возвращаемого средства вызова не будет заданным type
, а будет иметь все параметры, кроме первого leadingArgCount
, заменены одним массивом типа Object[]
, который будет окончательным параметром.
Перед вызовом целевого объекта вызывающий объект распределяет конечный массив, при необходимости применяет ссылочные приведения, а также распаковывает и расширяет примитивные аргументы. Если при вызове вызывающего средства предоставленный аргумент массива не имеет правильного числа элементов, он создает IllegalArgumentException
вместо вызова целевого объекта.
Этот метод эквивалентен следующему коду (хотя он может быть более эффективным): <blockquote>
{@code
MethodHandle invoker = MethodHandles.invoker(type);
int spreadArgCount = type.parameterCount() - leadingArgCount;
invoker = invoker.asSpreader(Object[].class, spreadArgCount);
return invoker;
}
</blockquote> Этот метод не создает отражающих исключений или исключений безопасности.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.