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 忽略该参数;它可能为 null。
否则,基础字段是实例字段。 如果指定的对象参数为 null,该方法将引发一个 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)。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。