我想构建一个包装任意内部表的容器ABAP类 .
我最初的方法是定义TYPE REF TO DATA的成员变量,并将引用传递给构造函数 .
问题是由于指针,实例仍然依赖于原始itab . 因此,如果原始表从内存中释放,则无法再访问数据 . 我需要有一个存储在对象中的表数据的真实副本,所以我能够将对象传递到itab的原始范围之外 .
有没有办法在ABAP中实现这一目标?
带有引用的示例代码在最后定义的场景中崩溃:
CLASS lcl_test_itab_wrapper DEFINITION
LOCAL
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
CLASS-METHODS:
access_outside_itab_scope.
METHODS:
constructor
IMPORTING
itab TYPE table,
access_itab_data.
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-METHODS:
sample_itab_setup
RETURNING VALUE(result) TYPE REF TO lcl_test_itab_wrapper.
DATA:
table_ref TYPE REF TO data.
ENDCLASS.
CLASS lcl_test_itab_wrapper IMPLEMENTATION.
METHOD access_itab_data.
FIELD-SYMBOLS
ASSIGN me->table_ref->* TO
WRITE:/ lines(
ENDMETHOD.
METHOD constructor.
me->table_ref = REF #( itab ).
ENDMETHOD.
METHOD sample_itab_setup.
DATA:
dummy_itab TYPE TABLE OF string.
APPEND 'test_record' TO dummy_itab.
CREATE OBJECT result EXPORTING itab = dummy_itab.
ENDMETHOD.
METHOD access_outside_itab_scope.
DATA(o_instance) = sample_itab_setup( ).
" Here it crashes as the referenced itab was freed already.
" I'd need to have a real itab copy stored in the instance
o_instance->access_itab_data( ).
ENDMETHOD.
Update: Solution 基于@vwegert回答
替换构造函数引用赋值:
CREATE DATA me->table_ref LIKE itab.
FIELD-SYMBOLS
ASSIGN me->table_ref->* TO