Java Field set()方法及实例
java.lang.reflect.Field 的 set() 方法用于将指定对象参数上由该Field对象代表的字段的值设置为作为参数传递的指定新值。如果底层字段有一个原始类型,新值会自动解包。如果字段是静态的,obj参数会被忽略;它可能是空的,否则,基础字段是一个实例字段。
- 这个方法会根据不同的情况抛出不同的异常,比如如果指定的对象参数是空的,这个方法会抛出一个NullPointerException
- 或IllegalArgumentException,如果指定的对象参数不是声明基础字段的类或接口的实例。
- 如果这个字段对象正在执行Java语言的访问控制,并且底层字段是不可访问的,该方法会抛出IllegalAccessException。
- 如果底层字段是原始类型,该方法会抛出一个IllegalArgumentException,尝试进行解包转换,将新值转换成原始类型的值。
- 如果这个尝试失败。如果在可能的解包后,新值不能通过身份转换或加宽转换转换为底层字段的类型,那么这个方法会抛出一个IllegalArgumentException。
- 如果该字段是静态的,并且如果它还没有被初始化,那么声明该字段的类将被初始化。该字段被设置为可能被解包和加宽的新值。如果该字段隐藏在obj的类型中,那么该字段的值将根据前面的规则被设置。
语法
参数: 该方法接受两个参数。
- obj : 对象,其字段应被修改,和
- value : 这是被修改的obj字段的新值。
返回 :该方法不返回任何东西。
异常 :该方法会抛出以下异常。
- IllegalAccessException : 如果这个字段对象正在执行Java语言的访问控制,并且底层字段是不可访问的或最终的。
- IllegalArgumentException : 如果指定的对象不是声明底层字段的类或接口的实例(或其子类或实现者),或者如果解包转换失败。
- NullPointerException : 如果指定的对象是空的,并且该字段是一个实例字段。
- ExceptionInitializerError :如果该方法引发的初始化失败。
以下程序说明了set()方法:
程序1 :
输出
程序2
输出
参考文献 : https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html#set-java.lang.Object-java.lang.Object-