gpt4 book ai didi

abap - 如何根据内部表动态创建对象?

转载 作者:行者123 更新时间:2023-12-05 00:00:42 26 4
gpt4 key购买 nike

我有一个内部表,其中填充了我要创建的对象的类型引用,如下所示(第一行是内部表 ITAB 的标题):

+==========+===============+
| OBJ_TYPE | OBJ_CLASS_REF |
+==========+===============+
| TYPE1 | ZCL_CLASS1 |
|----------|---------------|
| TYPE2 | ZCL_CLASS2 |
+----------+---------------+

我想在我的程序中做的是这个(我输入行号):
1   LOOP AT itab
2 "Concatenate LO_ and the value of ITAB-OBJ_TYPE
3 CONCATENATE 'LO_' itab-obj_type INTO v_obj_name.
4 "Create a reference object
5 CREATE DATA (v_obj_name) TYPE REF TO itab-obj_type.
6 CREATE OBJECT (v_obj_name).
7 ENDLOOP

如何成功完成第 5 行和第 6 行?

最佳答案

首先,提供一个接口(interface)或一个抽象父类(super class)并让您的各种类实现该接口(interface)或该抽象类的子类是一个好主意——这将为您节省很多不必要的强制转换。所以假设你有 ZIF_FOO 类 ZCL_BAR 和 ZCL_BAZ 实现它。该表可以是

TYPES: BEGIN OF t_line
type_name TYPE seoclass,
instance TYPE REF TO zif_foo,
END OF t_line.
DATA: lt_instances TYPE STANDARD TABLE OF t_line,
ls_instance TYPE t_line.

然后你可以像这样填写表格:
ls_instance-type_name = 'ZCL_BAR'. " or wherever you get this value from
CREATE OBJECT ls_instance-instance TYPE (ls_instance-type_name).

如果你想使用本地类,你可以这样做 - 只需使用更长的类型名称(SEOCLASS 的 30 个字符是不够的)并按照 RTTI 的在线文档中的描述指定类型名称:
ls_instance-typename = '\PROGRAM=ZMYREPORT\CLASS=LCL_MYCLASS'.

关于abap - 如何根据内部表动态创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com