ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

123、反射(RTTS)基础

2026/8/29 17:43:20 拓冰建站 浏览量
123、反射(RTTS)基础 123、反射(RTTS)基础那天晚上十一点,生产系统报了个错,说某个内表的结构和预期不符。我打开程序一看,里面用了一个动态赋值的写法,从数据库表读配置,然后给字段符号赋值。报错信息是“字段过长”还是“类型冲突”我记不清了,只记得当时脑子里闪过一个念头:要是能像看镜子一样看看这个内表到底是什么结构,就好了。后来我用CL_ABAP_TYPEDESCR查了一下运行时的类型,三分钟定位了问题。那是我第一次真正意识到,ABAP里也有“反射”这回事。很多人听到反射就觉得高深,其实在ABAP里,官方管它叫Runtime Type Services,也就是RTTS。说白了,它就是在程序运行的时候,去问一个数据对象:“你是什么类型?你的组件有哪些?你的长度是多少?”然后根据这些信息做判断、做转换、做动态处理。不是编译时写死的,是运行时查出来的。我们先看最常用的入口。ABAP提供了三个描述类:CL_ABAP_TYPEDESCR是基类,下面有CL_ABAP_STRUCTDESCR描述结构,CL_ABAP_TABLEDESCR描述内表,还有CL_ABAP_ELEMDESCR描述基本类型。你不需要记住所有方法,只需要记住一个核心方法:DESCRIBE_BY_DATA。它接收一个数据对象,返回对应的类型描述对象。DATA: lv_i TYPE i. DATA: lo_type TYPE REF TO cl_abap_typedescr. lo_type = cl_abap_typedescr=describe_by_data( lv_i ).就这么简单。lv_