java中使用反射获取和设置字段
时间:2020-02-23 14:34:48 来源:igfitidea点击:
在本教程中,我们将看到如何使用Java中的反射来获取和设置字段。 java.lang.reflect.Field
可用于在运行时使用/设置字段(成员变量)使用反射。
获取类的所有字段
可以从类对象获取类的所有字段。
这是一个例子。
Class cl=Employee.class; Field[] fields = cl.getFields()
Field[]
将拥有类的所有公共领域。
获得类的特定字段
如果我们已经知道要访问的字段的名称,则可以使用 cl.getField(String fieldName)
要得到 Field
目的。
获取和设置字段值
Field.get()
和 Field.set()
方法可以分别用于获得和设定字段的值。
让我们在举例的帮助下了解。
考虑一个名字的程序 Employee
由两个私有字段组成 name
和 age
。
package org.igi.theitroad; public class Employee { public String name; public int age; public Employee(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Employee [name=" + name + ", age=" + age + "]"; } }
创建名为的主类 PrivateFieldReflectionMain
package org.igi.theitroad; import java.lang.reflect.Field; public class GetSetFieldReflectionMain { public static void main(String[] args) { try { Employee e=new Employee("John",30); Field fieldName = Employee.class.getField("name"); //Getting field value String name=(String) fieldName.get(e); System.out.println("Name of Employee:"+name); //Setting field value fieldName.set(e, "Amit"); System.out.println("Employee's updated name: "+e.getName()); } catch (SecurityException | IllegalArgumentException | IllegalAccessException | NoSuchFieldException e) { e.printStackTrace(); } } }
运行上面的类时,我们将得到以下输出:输出:
员工姓名:约翰员工的更新名称:AMIT
请注意,这里的参数()和set()应该是字段所属类的对象。
例如:在这种情况下,名称字段属于Employee类,我们已通过E to Get()和set()字段对象的方法。
获取和设置静态字段值
如果我们想要获取和设置静态字段,然后使用Get()和set()字段方法时需要通过null。
例如:
public class Employee { public static String name;
然后我们可以获得并设置字段如下:
//Getting field value String name=(String) fieldName.get(null); System.out.println("Name of Employee:"+name); //Setting field value fieldName.set(null, "Amit");