访问私有字段和使用Java中反射的私有字段和方法
时间:2020-02-23 14:36:07 来源:igfitidea点击:
在本教程中,我们将看到如何访问私有字段和使用Java中的反射的方法。
我们可以使用反射访问私有字段和方法吗?
是的你可以。
它也很容易。
你只需要打电话 .setAccessible(true)在我们要访问的字段或者方法对象上。
访问私有字段
Class.getDeclaredField(String fieldName)或者 Class.getDeclaredFields()可用于获取私有字段。
Class.getField(String fieldName) 和 Class.getFields()仅返回公共字段,因此您将无法使用它们获取私有字段
考虑一个名为的类 Employee由两个私有字段组成 name和 age。
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()可用于获取私有方法。

