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 один целевой <>ли нулю или больше начальных значений (подсчитывается <leadingArgCountпо ) массивObject[]>, содержащий конечные аргументы </ul MethodHandle><<>
Вызывающий объект вызовет его целевой объект, например вызов 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).
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".