访问私有字段和使用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()
可用于获取私有方法。