尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

122、泛型编程与RTTI

122、泛型编程与RTTI 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_
返回列表