abap引用变量和动态类型

abap引用变量和动态类型,abap,Abap,我精通ABAP,掌握OO和light引用变量,但似乎无法更深入地掌握引用变量和动态类型等。我读了一些书,但似乎无法获得我认为需要的深刻理解。 有没有人知道一些很棒的教程或网站可以提供清晰简洁的信息?谢谢 首先,只要在谷歌上搜索这个帖子标题,你就是黄金 第二: 我不确定我是否正确理解您,您是否想了解以下结构: DATA lo_ref_var TYPE REF TO zcl_my_class. 您所说的动态类型是指ABAP 7.4/7.5(例如数据(lv_var)=123) 如果是的话,我会尽量给

我精通ABAP,掌握OO和light引用变量,但似乎无法更深入地掌握引用变量和动态类型等。我读了一些书,但似乎无法获得我认为需要的深刻理解。

有没有人知道一些很棒的教程或网站可以提供清晰简洁的信息?谢谢

首先,只要在谷歌上搜索这个帖子标题,你就是黄金

第二: 我不确定我是否正确理解您,您是否想了解以下结构:

DATA lo_ref_var TYPE REF TO zcl_my_class.
您所说的动态类型是指ABAP 7.4/7.5(例如数据(lv_var)=123)

如果是的话,我会尽量给你一个大概的想法: 引用变量只是一个“准备成为”对象的变量。 如果您以此为例:

DATA lo_ref_var TYPE REF TO zcl_my_class.
CREATE OBJECT lo_ref_var.
DATA(lv_text) = text-000.
DATA(lv_int) = 1.
然后假设构造函数不需要任何变量,您将得到zcl_my_类的一个实例及其所有属性和方法。此外,如果您将抽象类zcl_abs_类作为超类,将zcl_sub_类1和zcl_sub_类2作为非抽象子类,那么:

DATA:
  lo_abs TYPE REF TO zcl_abs_class,
  lo_sub1 TYPE REF TO zcl_sub_class1,
  lo_sub2 TYPE REF TO zcl_sub_class2.

CREATE OBJECT: lo_sub1, lo_sub2.
lo_abs ?= lo_sub1.
lo_abs ?= lo_sub2.
您可以做的(如上所示)是将子类对象强制转换为超级类引用变量,因为子类继承自zcl_abs_类。 更多信息,请进行挖掘

动态类型: 这实际上非常简单,您需要记住的是,在动态创建变量时,变量必须具有类型。例如:

DATA lo_ref_var TYPE REF TO zcl_my_class.
CREATE OBJECT lo_ref_var.
DATA(lv_text) = text-000.
DATA(lv_int) = 1.
带有lv_text的行将不起作用(不会编译),因为text-000没有精确的类型。 另一方面,第二行将采用I型。 如果您想决定选择哪种类型,可以通过以下方式进行:

DATA(lv_bukrs) = CONV bukrs( '1234' ).
DATA(lv_bukrs2) = CONV #( lv_bukrs ).
您甚至可以通过以下方式使用现有变量的类型:

DATA(lv_bukrs) = CONV bukrs( '1234' ).
DATA(lv_bukrs2) = CONV #( lv_bukrs ).
因为“#”表示“使用括号内的变量类型”


希望这能帮助您开始:)

这可能是值得一提的问题,但根据以下内容,这是离题的:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所做的工作。”