
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
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。