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由两个私有字段组成 nameage

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