語言

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 一個單一目標 <li>零個或更多前導值(以 leadingArgCount) 計數 li <>一個Object[]包含後置參數 </ul 的陣列MethodHandle><<>

呼叫者會以指示type的呼叫MethodHandle#invoke invoke方式呼叫其目標。 也就是說,如果目標恰好屬於給定 type的 ,其行為會像 invokeExact;否則它會表現得像 MethodHandle#asType asType 是用來將目標轉換成所需的 type。

回傳的呼叫器型別不會是給定 type的 ,而是除了第一個 leadingArgCount 參數外的所有參數都被一個型別 Object[]為 的陣列替換,該陣列將成為最終參數。

在呼叫目標之前,呼叫者會展開最終陣列,必要時套用參考鑄造,並展開並擴大原始參數。 如果呼叫時,所提供的陣列參數元素數不正確,呼叫器會拋出 an IllegalArgumentException 而非呼叫目標。

此方法等同於以下程式碼(雖然可能更有效率): <blockquote>

{@code
            MethodHandle invoker = MethodHandles.invoker(type);
            int spreadArgCount = type.parameterCount() - leadingArgCount;
            invoker = invoker.asSpreader(Object[].class, spreadArgCount);
            return invoker;
            }

</blockquote> 此方法不會拋出任何反射性或安全例外。

的 java.lang.invoke.MethodHandles.spreadInvoker(java.lang.invoke.MethodType, int)Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於