Java反射是一种强大的工具,可以在运行时动态地获取和操作Java类信息,本篇详解Java反射获取私有属性@mikechen
Java反射获取私有属性,一般会分为如下4个步骤:
第一步:获取Class对象
要获取类的私有属性,需要先获取该类的Class对象,可以通过类名或对象名获取。
// Step 1: 获取Class对象 Class<?> cls = obj.getClass();
第二步: 获取私有属性Field对象
通过Class对象的getDeclaredField()方法可以获取Field对象,需要传入属性名作为参数。
// Step 2: 获取私有属性Field对象 Field privateField = cls.getDeclaredField("myPrivateField");
第三步:设置访问权限
由于获取到的是一个私有属性,所以需要通过setAccessible(true)方法设置访问权限,才能对其进行操作。
// Step 3: 设置访问权限 privateField.setAccessible(true);
第四步: 获取私有属性的值
通过Field对象的get()方法可以获取私有属性的值。
// Step 4: 获取私有属性的值 int fieldValue = (int) privateField.get(obj); System.out.println("私有属性的值为:" + fieldValue);
Java反射获取私有属性完整示例如下:
import java.lang.reflect.Field; public class MyClass { private int myPrivateField = 123; public int getMyPrivateField() { return myPrivateField; } } public class Main { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { MyClass obj = new MyClass(); // Step 1: 获取Class对象 Class<?> cls = obj.getClass(); // Step 2: 获取私有属性Field对象 Field privateField = cls.getDeclaredField("myPrivateField"); // Step 3: 设置访问权限 privateField.setAccessible(true); // Step 4: 获取私有属性的值 int fieldValue = (int) privateField.get(obj); System.out.println("私有属性的值为:" + fieldValue); // Step 5: 修改私有属性的值 privateField.set(obj, 456); // 验证私有属性的值是否已修改 int modifiedFieldValue = obj.getMyPrivateField(); System.out.println("修改后的私有属性的值为:" + modifiedFieldValue); } }
在这个示例中,我们同样定义了一个包含私有属性myPrivateField和公有方法getMyPrivateField()的类MyClass。
然后,按照步骤获取私有属性myPrivateField的Field对象,并设置访问权限。
以上就是Java反射获取私有属性详解,更多内容请查看:Java反射详解(万字图文全面总结)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》