語言

MethodHandles.Lookup.Bind(Object, String, MethodType) 方法

定義

產生一個非靜態方法的早綁方法句柄。

[Android.Runtime.Register("bind", "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public Java.Lang.Invoke.MethodHandle Bind(Java.Lang.Object receiver, string name, Java.Lang.Invoke.MethodType type);
[<Android.Runtime.Register("bind", "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
member this.Bind : Java.Lang.Object * string * Java.Lang.Invoke.MethodType -> Java.Lang.Invoke.MethodHandle

參數

receiver
Object

存取方法的物件

name
String

方法名稱

type
MethodType

方法的類型,省略接收參數

傳回

所需方法的 handle

屬性

備註

產生一個非靜態方法的早綁方法句柄。 接收者必須有一個超型 defc 態,使得查找類別能存取該名稱與類型的方法。 方法及其所有參數類型必須對查找物件可存取。 方法的 handle 類型將與方法相同,且不需插入額外的接收參數。 給定的接收器會綁定到方法代號中,因此每次呼叫該方法代號都會在該接收器上呼叫該請求的方法。

回傳的方法 handle 會有 MethodHandle#asVarargsCollector 變數元數,當且僅當該方法的變數元數修飾位0x0080元()被設定 <為 em>和</em> ,且尾隨陣列參數並非唯一參數。 (如果尾隨陣列參數是唯一的參數,則給定的接收器值會被綁定在該參數上。)

這相當於以下程式碼: <blockquote>

{@code
            import static java.lang.invoke.MethodHandles.*;
            import static java.lang.invoke.MethodType.*;
            ...
            MethodHandle mh0 = lookup().findVirtual(defc, name, type);
            MethodHandle mh1 = mh0.bindTo(receiver);
            MethodType mt1 = mh1.type();
            if (mh0.isVarargsCollector())
              mh1 = mh1.asVarargsCollector(mt1.parameterType(mt1.parameterCount()-1));
            return mh1;
            }

</blockquote> 其中 defc 是 receiver.getClass() 該類別的超級型態,且該請求的方法可被查找類別存取。 (注意,這 bindTo 不保留變數元數。)

Java 文件 java.lang.invoke.MethodHandles.Lookup.bind(java.lang.Object, java.lang.String, java.lang.invoke.MethodType)。

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

適用於