恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

把注解当“便利贴”——运行时自动识别字段

  • 首页
  • 资讯中心
  • /
  • 把注解当“便利贴”——运行时自动识别字段

相关资讯

深入解析TMS320C5x DSP三大核心单元:CALU、PLU与ARAU的协同优化实战 2026/8/2 18:16:25
特斯拉Model 3 CAN总线终极解析指南:5分钟快速掌握车辆数据解码 2026/8/2 18:16:26
WASM 在企业级应用中的落地:哪些场景已经成熟,哪些还在探索 2026/8/2 18:16:26

最新资讯

CRMEB Pro v1.1.4电商系统部署与二次开发实战指南
Linux面试题50道:命令、权限、进程、网络与故障排查详解
本地化OpenResearch研究流水线:资料采集与观点提取自动化实践
PHP CRM源码二次开发实战:办公协同模块打通与避坑指南
MySQL连接数上限探秘:从默认151到科学调优与故障排查
告别信息差:8大免费资源站点与高效检索管理实战指南

今日推荐

麒麟Kylin V10 SP3服务器安装实战:硬件兼容、启动优化与生产级分区
华为手机助手导致Windows内存完整性关闭的根因与修复
图书馆图书借阅管理系统:JSP+Servlet+MySQL源码部署与答辩指南

本周热门

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

把注解当“便利贴”——运行时自动识别字段

发布时间:2026/9/26 5:35:17
把注解当“便利贴”——运行时自动识别字段 一、这次又遇到了什么麻烦每个订单对象有几十个字段程序员每次写导出代码都要手动列出“商品名对应A列、价格对应B列”太容易出错而且以后字段一改到处都要改。我们能不能在订单类的字段上直接写好“这是哪一列、什么标题”让程序自己去读这些配置这时候就该注解Annotation出场了。二、注解到底是什么你可以把注解理解成贴在代码上的便利贴。它对程序的运行逻辑没有直接影响但编译器、框架、或者我们自己写的工具可以去读这些“便利贴”上的信息然后决定怎么做。Java内置了三个最常用的便利贴我们项目里其实已经用了// 1. Override —— 告诉编译器“我真的是在重写你帮我检查一下方法签名对不对” Override public void export(ListOrder orders, String filePath) { ... } // 2. Deprecated —— 告诉调用者“这个方法过时了别用了” Deprecated public void oldExportMethod() { ... } // 3. SuppressWarnings —— 告诉编译器“我知道这里有问题别给我报警告了” SuppressWarnings(unchecked) public void someMethod() { ... }现在我们要自己定制一个便利贴让导出工具能读懂。三、第一步自定义一个注解 ExcelColumn这个注解就用来标记字段对应的Excel列标题。import java.lang.annotation.*; // Target 指定这个注解可以贴在哪些地方这里只贴在字段上 Target(ElementType.FIELD) // Retention 指定注解保留到什么时候RUNTIME 表示程序运行时还能通过反射读到它 Retention(RetentionPolicy.RUNTIME) public interface ExcelColumn { // 列标题默认值空字符串 String title() default ; // 列序号从0开始默认-1表示按字段顺序 int order() default -1; }Target决定便利贴能贴哪儿方法、字段、类等。Retention决定便利贴存活多久RUNTIME是存活到运行时这样我们才能用反射读。四、第二步把注解贴在订单类的字段上import java.math.BigDecimal; import java.util.Date; public class Order { ExcelColumn(title 订单编号, order 0) private String orderId; ExcelColumn(title 商品名称, order 1) private String productName; ExcelColumn(title 单价, order 2) private BigDecimal price; ExcelColumn(title 数量, order 3) private int quantity; ExcelColumn(title 下单时间, order 4) private Date createTime; // 有些字段不想导出干脆就不贴注解 private String internalNote; // 构造方法、getter/setter 略... }现在任何一个看这个类的人都能直接知道导出的列标题和顺序。五、第三步让导出器读注解自动生成Excel我们改造一下 ExcelOrderExporter让它利用反射读取注解信息不再需要硬编码列名。import java.lang.reflect.Field; import java.util.*; public class ExcelOrderExporter extends OrderExporter { Override public void export(ListOrder orders, String filePath) { // 1. 反射获取Order类的所有字段 Field[] fields Order.class.getDeclaredFields(); // 2. 找出所有贴了ExcelColumn的字段并按order排序 ListField excelFields new ArrayList(); for (Field field : fields) { if (field.isAnnotationPresent(ExcelColumn.class)) { excelFields.add(field); } } excelFields.sort(Comparator.comparingInt(f - { int o f.getAnnotation(ExcelColumn.class).order(); return o -1 ? Integer.MAX_VALUE : o; })); // 3. 模拟生成Excel真实项目用POI库 System.out.println(----- 导出Excel表头 -----); for (Field field : excelFields) { ExcelColumn col field.getAnnotation(ExcelColumn.class); System.out.print(col.title() \t); } System.out.println(); // 4. 遍历订单数据输出每一行 for (Order order : orders) { for (Field field : excelFields) { field.setAccessible(true); // 因为字段是private的 try { Object value field.get(order); System.out.print(value \t); } catch (IllegalAccessException e) { e.printStackTrace(); } } System.out.println(); } System.out.println(Excel已保存到: filePath); } }六、软件运行时实现了什么功能当用户点击“导出Excel”时程序会读取 Order 类上所有带了 ExcelColumn 的字段。按 order 排列顺序。用 title 做表头。自动提取每个订单对象中对应字段的值填入表格。效果哪天订单表多了个字段开发人员只要在那个字段上加一个注解导出的Excel就会自动多一列不用去修改导出器的核心代码。这就是“便利贴”带来的灵活性和低耦合。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号