访问私有字段和使用Java中反射的私有字段和方法

时间:2020-02-23 14:36:07  来源:igfitidea点击:

在本教程中,我们将看到如何访问私有字段和使用Java中的反射的方法。

我们可以使用反射访问私有字段和方法吗?
是的你可以。
它也很容易。
你只需要打电话 .setAccessible(true)在我们要访问的字段或者方法对象上。

访问私有字段

Class.getDeclaredField(String fieldName)或者 Class.getDeclaredFields()可用于获取私有字段。

Class.getField(String fieldName) 和 Class.getFields()仅返回公共字段,因此您将无法使用它们获取私有字段

考虑一个名为的类 Employee由两个私有字段组成 nameage

package org.arpit.theitroad;
 
public class Employee {
 
	private String name;
	private 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;
	}
 
	private 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.arpit.theitroad;
 
import java.lang.reflect.Field;
 
public class PrivateFieldReflectionMain {
 
	public static void main(String[] args) {
		try {
			Employee e=new Employee("John",30);
			
			Field privateField = Employee.class.getDeclaredField("name");
			
			privateField.setAccessible(true);
			
			String name=(String) privateField.get(e);
			System.out.println("Name of Employee:"+name);
		} catch (SecurityException | IllegalArgumentException | IllegalAccessException | NoSuchFieldException e) {
			e.printStackTrace();
		}
	}
}

运行上面的类时,我们将得到以下输出:

员工姓名:约翰

正如我们所看到的,我们可以使用反射访问私有字段 name

访问私有方法

如果要使用反射调用任何方法,则可以使用反射通过调用方法。

Class.getDeclaredMethod(String methodName,Class<?>... parameterTypes)或者 Class.getDeclaredMethods()可用于获取私有方法。