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
исходящий аргумент -th будет взят из I
входящего аргумента -th, где 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>
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.