繁体   English   中英

如何基于内表动态创建对象?

[英]How do I dynamically create objects based on an internal table?

我有一个内部表,其中填充了我要创建的对象的类型引用,如下所示(第一行是内部表 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 行?

首先,提供一个接口或抽象超类并让您的各种类实现该接口或该抽象类的子类是一个好主意 - 这将为您节省大量不必要的转换。 因此,假设您有 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'.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM