122、泛型编程与RTTI
2026/8/29 18:08:11 网站建设 项目流程

122、泛型编程与RTTI

那天晚上排查一个报表的性能问题,后台作业跑了一个小时还没结束,SE30一看,热点全在一个动态读取内表的FORM里。代码逻辑不复杂,就是根据传入的字段名,用ASSIGN COMPONENT动态取数,再拼到ALV输出表里。问题出在我用了一个蠢办法:把整条工作区先转成字符串,再按偏移截取,那能不慢吗?旁边老同事瞟了一眼,幽幽说:“你都知道字段名了,为什么不直接用RTTI?再不济也可以ASSIGN COMPONENT sy-index 啊,循环里少做两次类型转换。”那一刻我意识到,泛型编程和RTTI不是锦上添花的花架子,是真正能救命的硬功夫。

ABAP里谈泛型,别指望像C++模板那样在编译期就生成一堆代码。ABAP的泛型更像是“鸭子类型”的运行时约定:只要参数长着那个样子,你就能把它当那个样子用。最典型的场景就是函数方法入参定义为TYPE ANY TABLE、TYPE ANY、TYPE DATA,调用方啥都能传,被调方靠RTTI去嗅探真实结构。这种写法写得好,一个工具类能顶十份复制粘贴的代码;写得不好,就是给自己埋雷。

先看一个最常见的泛型入口:

METHOD process_table. IMPORTING it_data TYPE ANY TABLE iv_field TYPE string. ENDMETHOD.

这里it_data就是任意内表,你没法直接用it_data-fieldname这种点语法。这就像你收到一个密封快递,知道里面有东西,但必须拆开看才知道是啥。拆箱工具就是RTTI:CL_ABAP_

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询