MethodHandles.Lookup.Bind(Object, String, MethodType) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
產生一個非靜態方法的早綁方法句柄。
[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 不保留變數元數。)
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。