Java反射获取私有属性(手把手教你4步获取)

Java反射获取私有属性(手把手教你4步获取)-mikechen

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面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法