語言

Field.Set(Object, Object) 方法

定義

將該 Field 物件在指定物件參數中所代表的欄位設為指定的新值。

[Android.Runtime.Register("set", "(Ljava/lang/Object;Ljava/lang/Object;)V", "")]
public void Set(Java.Lang.Object? obj, Java.Lang.Object? value);
[<Android.Runtime.Register("set", "(Ljava/lang/Object;Ljava/lang/Object;)V", "")>]
member this.Set : Java.Lang.Object * Java.Lang.Object -> unit

參數

obj
Object

應修改其域的物件

value
Object

域 的新值 obj 被修改

屬性

例外狀況

若物件為且 null 場為非靜態

如果物件與宣告類別不相容

如果這個欄位無法被存取

備註

將該 Field 物件在指定物件參數中所代表的欄位設為指定的新值。 若底層欄位具有原始型態,該新值會自動展開。

操作流程如下:

若底層域為靜態 obj ,則忽略該參數;可能是空函數。

否則底層欄位為實例欄位。 若指定的物件參數為空,該方法會拋出一個 NullPointerException。 若指定的物件參數不是宣告底層欄位的類別或介面實例,該方法會拋出一個 IllegalArgumentException

如果這個Field物件正在強制執行 Java 語言的存取控制,而底層欄位無法存取,該方法會拋出一個 IllegalAccessException

若底層欄位為終結Field,該物件擁有 <em>write</em> 存取權,當且僅當滿足以下條件:<ul><li>#setAccessible(boolean) setAccessible(true) 已成功;Field</li><li>欄位為非靜態;且</li><li>欄位的宣告類別不是 Class#isRecord() 記錄類別。</li></ul> 如果上述任何檢查未被滿足,此方法會拋出一個 IllegalAccessException

以這種方式設置最終欄位,只有在反序列化或重建具有空白最終欄位的類別實例時才有意義,且在這些類別尚未被程式其他部分存取之前。 在其他情境中使用可能會產生不可預測的影響,包括程式其他部分持續使用該欄位的原始值的情況。

若底層欄位為原始型態,則嘗試展開包裝轉換,將新值轉換為原始型態值。 若此嘗試失敗,該方法會拋出一個 IllegalArgumentException

若在可能展開後,新值無法透過恆等式或擴大轉換轉換為底層欄位的型別,則該方法會拋出一個 IllegalArgumentException

若底層欄位為靜態,宣告該欄位的類別若尚未初始化,則會被初始化。

欄位設定為可能展開並擴大的新值。

若欄位隱藏於 類型 obj中,則該欄位的值依前述規則設定。

Java 文件 java.lang.reflect.Field.set(java.lang.Object, java.lang.Object)

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

適用於