当前位置: 首页 > news >正文

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. 模块与安全
    • 深度反射受模块访问限制
    • 不要随意依赖模块内部实现细节
http://www.cnnetsun.cn/news/3223812.html

相关文章:

  • 智融交通·绿动未来 | 智能新能源车辆数字主线技术与产业论坛成功举办
  • 高压隔离技术:ISOM8710与PIC32MZ的工业应用解析
  • IQR与MAD异常值检测实战:3种数据分布场景下的Python代码与效果对比
  • 萨科微slkor2026年7月6日“每日芯闻”。国际芯闻:
  • KMS_VL_ALL_AIO:Windows系统一键激活的终极解决方案
  • 户外LED广告牌尺寸规格大全
  • NAS / 服务器断电数据丢失?UPS 配套 USB关机保护板,市电断电池低自动提示服务器/电脑关机
  • easyMarkets平台评测:工具体验与平台稳定性有哪些观察重点
  • VLM增强的语义蒙特卡洛定位:让机器人真正看懂环境
  • 人生解释器的最小单位是什么?
  • 直击零线过载隐患 中线安防保护器综合治理方案
  • 细胞系vs原代:原代牙周韧带成纤维细胞,为什么不能用细胞系代替?
  • 2026年无锡干细胞机构如何考量?解析行业布局与合规焦点
  • 数字人制作公司哪家好?2026年聚焦全栈能力与行业落地的服务商推荐
  • MiMo-V2.5-TTS 全系列API使用:语音合成 + 音色克隆 + 音色设计 + 唱歌模式(限时免费)
  • 增量数据如何自动分类分级,避免目录“过期“?
  • 如何永久保存你的微信记忆:3步实现聊天记录完整备份与智能分析
  • 计算机毕业设计之考勤系统设计与实现
  • 若依系统 Druid 监控 9 个默认路径探测与弱口令爆破实战
  • J-space:Claude的意识起源,它已经注意到自己正在被测试了!
  • 10分钟部署开源智能体,零代码搞定AI写作+办公自动化!
  • 基于RocketMQ事务消息解耦霸王餐外卖CPS订单与返利发放流程
  • 2026年AI论文工具大揭秘,这几款让你的论文写作效率飙升
  • AI听力口语陪练,科学训练方法论驱动的开源APP
  • Git SSL握手失败怎么办?零基础解决GnuTLS与OpenSSL兼容问题
  • 拒绝无效社交,青少年如何建立高质量人际关系
  • 2026年Q3领英大变革!AI驱动社交销售新范式——从“人找客户“到“AI帮找客户“
  • 2026安康黄金回收白银回收铂金回收靠谱临街实体公安备案支持到店核验门店联系方式推荐
  • SolonCode CLI 为什么选择 Java 技术栈?
  • 别让好内容被AI忽视:GEO优化的六大核心原则,提升内容引用率