news 2026/7/8 14:00:42

457. Java 反射 - 深度访问

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
457. Java 反射 - 深度访问

文章目录

  • 457. Java 反射 - 深度访问
    • 1. 深度访问示例:修改私有字段
    • 2. 深度反射与 Java 模块系统
    • 3. 总结

457. Java 反射 - 深度访问

到目前为止,我们看到的都是安全的反射操作

  • 获取公共方法
  • 调用静态方法
  • 调用接口方法

这些方法没有真正突破 Java 的访问控制,唯一“危险”的地方是编译器无法保证方法存在或可访问。

现在,我们要尝试深入镜子,操作私有字段和不可见的成员。


1. 深度访问示例:修改私有字段

假设我们有一个简单的Person类:

publicclassPerson{privatefinalStringname;privatefinalintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}@OverridepublicStringtoString(){returnname+" ("+age+")";}}

我们想通过 Reflection修改私有且final的字段

importjava.lang.reflect.Field;publicclassFountainOfYouth{publicstaticvoidmain(String[]args)throwsReflectiveOperationException{Personperson=newPerson("Heinz Kabutz",51);System.out.println(person);// 获取私有字段FieldageField=Person.class.getDeclaredField("age");ageField.setAccessible(true);// ⚠ 开启深度反射// 修改字段值intage=(int)ageField.get(person);age*=0.9;// 年轻 10%ageField.set(person,age);System.out.println(person);}}

输出示例

HeinzKabutz(51)HeinzKabutz(45)

说明

  • 虽然age字段是private final,但通过深度反射,我们仍然可以修改它
  • 如果Personrecord,则无法通过深度反射修改字段

2. 深度反射与 Java 模块系统

在 Java 9 之后,引入了模块系统(Module System):

  • 深度反射只有在模块开放的情况下才可用
  • 理想情况下,应请求模块作者开放包给你的模块
  • 否则,你可能需要通过--add-opens命令行参数强行打开包(不推荐)

风险提示

  • 深度反射可能破坏封装
  • 模块升级或字段更改可能导致反射代码崩溃
  • 仅在绝对必要时使用

3. 总结

  1. 浅层反射:访问公共方法、调用静态方法,安全、常用
  2. 深度反射:访问私有、final字段和方法,危险且不推荐
  3. 模块与安全
    • 深度反射受模块访问限制
    • 不要随意依赖模块内部实现细节
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 13:56:21

高压隔离技术:ISOM8710与PIC32MZ的工业应用解析

1. 高压安全隔离技术概述在工业自动化、电力电子和医疗设备等领域,高压电路与低压控制系统的安全隔离是确保人员和设备安全的关键需求。ISOM8710作为TI(德州仪器)推出的高性能数字隔离器,与Microchip的PIC32MZ1024EFF144微控制器组…

作者头像 李华
网站建设 2026/7/8 13:52:31

萨科微slkor2026年7月6日“每日芯闻”。国际芯闻:

萨科微slkor2026年7月6日“每日芯闻”。国际芯闻:1、韩媒报道,三星电子DRAM继第一季度涨价90%,第二季度涨价60%之后,第三季度将再涨价20%。2、微软公司拟投资25亿美元及派遣 6000 名员工,设立新的人工智能实施部门。3、…

作者头像 李华
网站建设 2026/7/8 13:50:36

KMS_VL_ALL_AIO:Windows系统一键激活的终极解决方案

KMS_VL_ALL_AIO:Windows系统一键激活的终极解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统和Office软件的激活问题而烦恼吗?KMS_VL_ALL_AIO智…

作者头像 李华
网站建设 2026/7/8 13:50:32

户外LED广告牌尺寸规格大全

户外LED广告牌尺寸规格的核心在于根据安装场景、观看距离和监管要求进行模块化定制,采用标准箱体尺寸如960mm960mm或1280mm1280mm,通过灵活拼接实现从小型立杆式到大型落地式的高适配解决方案。这种方法不仅满足结构安全和光学性能需求,还能优…

作者头像 李华