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");

