Field.Set(Object, Object) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將該 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 所創建與分享的作品,並依授權條款所描述的使用進行修改。