Java Field set()方法及实例

Java Field set()方法及实例

java.lang.reflect.Fieldset() 方法用于将指定对象参数上由该Field对象代表的字段的值设置为作为参数传递的指定新值。如果底层字段有一个原始类型,新值会自动解包。如果字段是静态的,obj参数会被忽略;它可能是空的,否则,基础字段是一个实例字段。

  • 这个方法会根据不同的情况抛出不同的异常,比如如果指定的对象参数是空的,这个方法会抛出一个NullPointerException
  • 或IllegalArgumentException,如果指定的对象参数不是声明基础字段的类或接口的实例。
  • 如果这个字段对象正在执行Java语言的访问控制,并且底层字段是不可访问的,该方法会抛出IllegalAccessException。
  • 如果底层字段是原始类型,该方法会抛出一个IllegalArgumentException,尝试进行解包转换,将新值转换成原始类型的值。
  • 如果这个尝试失败。如果在可能的解包后,新值不能通过身份转换或加宽转换转换为底层字段的类型,那么这个方法会抛出一个IllegalArgumentException。
  • 如果该字段是静态的,并且如果它还没有被初始化,那么声明该字段的类将被初始化。该字段被设置为可能被解包和加宽的新值。如果该字段隐藏在obj的类型中,那么该字段的值将根据前面的规则被设置。

语法

public void set(Object obj, Object value)
         throws IllegalArgumentException,
                IllegalAccessException

参数: 该方法接受两个参数。

  • obj : 对象,其字段应被修改,和
  • value : 这是被修改的obj字段的新值。

返回 :该方法不返回任何东西。

异常 :该方法会抛出以下异常。

  • IllegalAccessException : 如果这个字段对象正在执行Java语言的访问控制,并且底层字段是不可访问的或最终的。
  • IllegalArgumentException : 如果指定的对象不是声明底层字段的类或接口的实例(或其子类或实现者),或者如果解包转换失败。
  • NullPointerException : 如果指定的对象是空的,并且该字段是一个实例字段。
  • ExceptionInitializerError :如果该方法引发的初始化失败。

以下程序说明了set()方法:

程序1 :

// Java program illustrate set() method
 
import java.lang.reflect.Field;
 
public class GFG {
 
    public static void main(String[] args)
        throws Exception
    {
 
        // create user object
        Employee emp = new Employee();
 
        // print value of uniqueNo
        System.out.println(
            "Value of uniqueNo before "
            + "applying set is "
            + emp.uniqueNo);
 
        // Get the field object
        Field field
            = Employee.class
                  .getField("uniqueNo");
 
        // Apply set Method
        field.set(emp, (short)1213);
 
        // print value of uniqueNo
        System.out.println(
            "Value of uniqueNo after "
            + "applying set is "
            + emp.uniqueNo);
 
        // print value of salary
        System.out.println(
            "Value of salary before "
            + "applying set is "
            + emp.salary);
 
        // Get the field object
        field = Employee.class.getField("salary");
 
        // Apply set Method
        field.set(emp, 324344.2323);
 
        // print value of salary
        System.out.println(
            "Value of salary after "
            + "applying set is "
            + emp.salary);
    }
}
 
// sample class
class Employee {
 
    // static values
    public static short uniqueNo = 239;
    public static double salary = 121324.13333;
}

输出

Value of uniqueNo before applying set is 239
Value of uniqueNo after applying set is 1213
Value of salary before applying set is 121324.13333
Value of salary after applying set is 324344.2323

程序2

// Java program illustrate set() method
 
import java.lang.reflect.Field;
 
public class GFG {
 
    public static void main(String[] args)
        throws AccessException
    {
 
        // create attributes object
        attributes att = new attributes();
 
        // Get the value field object
        Field field1
            = attributes.class
                  .getField("bolValue");
        Field field2
            = attributes.class
                  .getField("intValue");
        Field field3
            = attributes.class
                  .getField("doubleValue");
 
        // Apply set Method
        field1.set(att, false);
        field2.set(att, 1213);
        field3.set(att, 342414.131);
 
        // print value of isActive
        System.out.println(
            "Values after "
            + "applying set are { "
            + att.bolValue + ", "
            + att.intValue
            + ", " + att.doubleValue
            + " }.");
    }
}
 
// sample attributes class
class attributes {
 
    // static value value
    public static boolean bolValue = false;
    public static int intValue = 13134;
    public static double doubleValue = 1314.141;
}

输出

Values after applying set are { false, 1213, 342414.131 }

参考文献 : https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html#set-java.lang.Object-java.lang.Object-

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程