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

为什么要使用反射举例

​有时候不用反射代码根本写不下去,举个例子:

场景再现
用户传上来一段 完全动态的 JSON:

{"userName":"Tom","age":18,"email":"tom@x.com"}

你的类:

class Person {private String userName;private int age;private String email;// 省略 getter/setter
}

一、用“正规手段”写死行不行?

// 正规代码:编译期就把方法名写死
if (json.has("userName")) {person.setUserName(json.getString("userName"));
}
if (json.has("age")) {person.setAge(json.getInt("age"));
}
if (json.has("email")) {person.setEmail(json.getString("email"));
}

看起来可以,但问题来了:

  1. 字段个数/名字一变就要改代码
    明天加 “address”、后天加 “phone”,你还得重新编译整个程序。

  2. 字段类型可能是任意嵌套对象

{"dept":{"id":1,"name":"RD"}}

你得再写一段:

if (json.has("dept")) {JSONObject d = json.getJSONObject("dept");Dept dept = new Dept();dept.setId(d.getInt("id"));dept.setName(d.getString("name"));person.setDept(dept);
}

无限嵌套 → 代码爆炸

二、用反射的“魔法”怎么做?

// 这段代码**永远不需要改**,不管 JSON 里突然多出多少字段
Class<?> clazz = Person.class;
Object obj = clazz.newInstance();for (String key : json.keySet()) {// 1. 把字段名变成 setter 方法名String setter = "set" + key.substring(0,1).toUpperCase() + key.substring(1);// 2. 根据字段类型拿到方法对象Method m = clazz.getMethod(setter, deduceType(json, key));// 3. invoke 调用m.invoke(obj, json.get(key));
}
  • 字段名、类型、嵌套层级全部运行时动态推断;
  • 新增/删除字段 → 零代码改动;
  • 任何类都能复用这一段逻辑,这就是 Jackson/Fastjson 的核心。
http://www.dtcms.com/a/478557.html

相关文章:

  • python开发生态及学习路线和应用领域都有哪些
  • bk7258 交叉编译libzip-1.11.4
  • 汽车级mosfet的应用场景
  • 手机做ppt的免费模板下载网站深圳自适应网站的公司
  • svn 库 co 下来有白叉
  • Windows安全狗安装教程
  • 深度解析:OpenCASCADE 中平面闭合轮廓的离散点提取
  • 河源盛世网站建设丽水市建设监理协会网站在哪里
  • 衡阳做网站建设的公司在哪里查关键词排名
  • linux学习笔记(30)网络编程——TCP协议详解
  • ICT 数字测试原理 21 - -VCL中的板级预处理
  • 学校要求做网站做网站要源代码
  • 项目缺乏成功衡量标准会导致什么问题
  • 2025年的12大技术栈
  • 越南国家建设部网站企业站手机网站
  • Qt6.7.2下,qml中Window组件全屏加载WebEngineView实现圆角
  • Struts2_S2-045漏洞复现:原理详解+环境搭建+渗透实践(CVE-2017-5638)
  • 【慕伏白】Android Studio 无线调试配置
  • 厦门方易网站制作有限公司做网站对象存储
  • 【Docker】零基础上手:原理+Ubuntu/Windows GUI 安装 + 镜像源 / 目录优化
  • 网站的引导页怎么做的手机虚拟空间
  • 大连网站开发公司力推选仟亿科技有源码如何搭建网站
  • 【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
  • 高并发面试
  • 模板网站 建设 方法西安网站建设中心
  • 《早期经验:语言智能体学习的中间道路》Agent Learning via Early Experience论文深度解读
  • QT6中Commd Link Button,Dialog Button Box,Tool Button 功能与应用
  • asp做网站安全性wordpress 文章 接口
  • 关系型数据库RDBMS与非关系型数据库NoSQL区别
  • 网站建设发布wordpress主题带会员中心