作为面对对象的编程语言,ABAP也是支持动态编程的。ABAP351作为一门独立的课程介绍了类反射机制如何实现的过程。
一、Field Symbols
Field Symbols(字段符号)在ABAP编程中经常使用,实际上它具备以下几点特性:
字段符号只是字段的一个别名,可以动态地指代字段本身。
可以在程序运行中定义。
无法复制。
字段符号和指针并不完全是一个概念。
DATA:text(20) TYPE c VALUE 'Hello world'.
FIELD-SYMBOLS:<fs> TYPE any.
ASSIGN text TO <fs>.
WRITE:/ <fs>.
二、Casting Filed Symbols
TYPES: my_type(9) TYPE C.
DATA:SmallField(5) TYPE C,
LargeField(10) TYPE C VALUE '1234567890',
TypeName(7) TYPE C VALUE 'MY_TYPE',
SomeType TYPE REF TO cl_abap_typedescr.
FIELD-SYMBOLS:<fs> TYPE any,
<fs> TYPE my_type.
ASSIGN LargeField TO <fs> CASTING.
ASSIGN LargeField TO <fa> CASTING TYPE MY_TYPE.
ASSIGN LargeField TO <fa> CASTING TYPE N.
ASSIGN LargeField TO <fa> CASTING TYPE (TypeName).
SomeType = cl_abap_typedescr=>describe_by_name( 'MY_TYPE' )
ASSIGN LargeField TO <fa> CASTING TYPE HANDLE SomeType.
ASSIGN LargeField TO <fa> CASTING LIKE SmallField.
ASSIGN LargeField TO <fa> CASTING LIKE <fa>.
三 、数据参考
变量定义
访问数据参考对象
类型已定义
x = dref->* " 访问结构中全部的数据对象
y = dref->comp " 访问某一个组件
类型未定义
ASSIGN dref->* TO <f>. " 访问所有的数据对象
ASSIGN COMPONENT 'comp' OF STRUCTURE <f> TO <fc>. " 访问组件如果对象是一个结构体
四、动态创建数据对象
几种动态创建数据对象的方法
CREATE DATA DREF TYPE TYPE | (TYPENAME).
CREATE DATA DREF TYPE TABLE OF TYPE | (TYPENAME).
CREATE DATA DREF TYPE REF TO TYPE | (TYPENAME)>.
CREATE DATA DREF TYPE HANDLE TYPEOBJ.
CREATE DATA DREF LIKE FILED.