反射获取私有属性

烂笔头 专栏收录该内容
23 篇文章 0 订阅

主要步骤:
  1. 类.class.getDeclaredField("字段")方法,获取类中指定的public、private成员属性变量;
  2. field.setAccessible(true),将私有属性变量设置为可访问的(打破了私有不可访问的规则);
  2.1. field.get(类的实例)来获取变量值。

反射工具类获取私有属性、方法:https://blog.csdn.net/yangsen159/article/details/87627300

 

类结构

public class MyTestBean {
    private String testStr;
    private String testStrTwo = "display";

    private String getTestStr(String str, int i) {
        return str + "-" + i;
    }
}

获取指定私有变量

MyTestBean myTestBean = new MyTestBean();

// 1. 设置要获取的成员变量
Field field = myTestBean.getClass().getDeclaredField("testStrTwo");
// 2. 参数值为true,禁止访问控制检查
field.setAccessible(true); 

System.out.println(field.get(myTestBean)); // 打印:display

获取指定私有方法

MyTestBean myTestBean = new MyTestBean();

// 1. 设置获取方法,及方法参数类型
Method method = myTestBean.getClass().getDeclaredMethod("getTestStr", new Class[]{String.class, int.class});
// 2. 设为可访问
method.setAccessible(true);
// 3. 调用指定类方法,及方法参数
Object invoke = method.invoke(myTestBean, new Object[]{"str", 3});

System.out.println(invoke); // 打印:str-3

获取所有私有变量 


    // 1. 创建实例
    MyTestBean myTestBean = new MyTestBean();

    // 2. getDeclaredFields():获取类的所有声明的成员属性字段,包括public、private和proteced,但是不包括父类的申明字段。
    Field[] fields = MyTestBean.class.getDeclaredFields();

    // 遍历所有成员属性(testStr,testStrTwo)
    for (int i = 0; i < fields.length; i++) {
        // 3. 设为可访问私有变量
        fields[i].setAccessible(true);

        System.out.println(fields[i].getName() + " : " + fields[i].get(myTestBean));        
        /*  私有变量key : 私有变量value

            testStr : null
            testStrTwo : display

         */
    }

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

祁_z

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值