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> Этот метод не создает отражающих исключений или исключений безопасности.

Документация по Java для java.lang.invoke.MethodHandles.spreadInvoker(java.lang.invoke.MethodType, int).

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

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