MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) Метод

Определение

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

[Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? PermuteArguments (Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodType? newType, params int[]? reorder);
[<Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member PermuteArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodType * int[] -> Java.Lang.Invoke.MethodHandle

Параметры

target
MethodHandle

дескриптор метода для вызова после изменения порядка аргументов

newType
MethodType

ожидаемый тип дескриптора нового метода

reorder
Int32[]

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

Возвращаемое значение

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

Атрибуты

Комментарии

Создает дескриптор метода, который адаптирует вызывающую последовательность заданного дескриптора метода к новому типу путем изменения порядка аргументов. Результирующий дескриптор метода гарантированно сообщает тип, равный требуемому новому типу.

Данный массив управляет изменением порядка. Вызовите #I количество входящих параметров (значение newType.parameterCount()) и число #O исходящих параметров (значение target.type().parameterCount()). Затем длина массива переупорядочения должна быть #Oравна , а каждый элемент должен быть неотрицательное число меньше #I. Для каждого N меньше, чем #O, Nисходящий аргумент -й будет приниматься из входящего аргумента I-й, где I имеет значение reorder[N].

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

В массиве переупорядочения не нужно указывать фактическую перестановку. Входящий аргумент будет дублироваться, если его индекс отображается в массиве несколько раз, а входящий аргумент будет удален, если его индекс не отображается в массиве. Как и в случае #dropArguments(MethodHandle,int,List) dropArgumentsс , входящие аргументы, не упомянутые в массиве переупорядочения, могут иметь любой тип, который определяется только .newType <blockquote>

{@code
            import static java.lang.invoke.MethodHandles.*;
            import static java.lang.invoke.MethodType.*;
            ...
            MethodType intfn1 = methodType(int.class, int.class);
            MethodType intfn2 = methodType(int.class, int.class, int.class);
            MethodHandle sub = ... (int x, int y) -> (x-y) ...;
            assert(sub.type().equals(intfn2));
            MethodHandle sub1 = permuteArguments(sub, intfn2, 0, 1);
            MethodHandle rsub = permuteArguments(sub, intfn2, 1, 0);
            assert((int)rsub.invokeExact(1, 100) == 99);
            MethodHandle add = ... (int x, int y) -> (x+y) ...;
            assert(add.type().equals(intfn2));
            MethodHandle twice = permuteArguments(add, intfn1, 0, 0);
            assert(twice.type().equals(intfn1));
            assert((int)twice.invokeExact(21) == 42);
            }

</blockquote>

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

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

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