我精通ABAP,掌握OO和轻量级引用变量,但似乎无法更深入地处理引用变量和动态类型等。我读了一些书,但似乎没有得到我所需要的深刻理解
有人知道一些很棒的教程或网站,可能会提供清晰简洁的内容吗?谢谢
首先,只需在谷歌上搜索这篇文章的标题,你就是黄金。
第二:我不确定我是否正确理解你,你想知道这样的结构吗:
DATA lo_ref_var TYPE REF TO zcl_my_class.
你所说的动态类型是指ABAP 7.4/7.5(例如DATA(lv_var(=123(吗?
如果是,我会试着给你一个大致的想法:引用变量只是一个"准备成为"对象的变量。如果你举个例子:
DATA lo_ref_var TYPE REF TO zcl_my_class.
CREATE OBJECT lo_ref_var.
然后假设构造函数不需要任何变量,您将获得zcl_my_classClass的一个实例及其所有属性和方法。同样,如果你有一个抽象类zcl_abs_class作为超级类,zcl_sub_class1和zcl_sub _class2作为它的非抽象子类,那么:
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_class"。要了解更多信息,请进行一些挖掘。
动态类型:事实上,这非常简单,您需要记住的是,在动态创建变量时,变量必须具有类型。例如:
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 ).
因为"#"的意思是"使用括号内的变量类型"。
希望这能帮助你开始:(