我有一个程序ZPROG1_TEST,我在其中定义了一个本地类LCL_PROG1_HELPER
。
我有第二个程序ZPROG2_TEST,我想在其中定义对这个类的变量引用。
我这样做难道不存在句法上的可能性吗?
或者,这在理论上对像CL_ABAP_CLASSDESCR
这样的RTTI类是可行的吗?
额外
我之所以要这样做,是因为我有一个自定义表单ZMM_MEDRUCK,它需要知道它打印的ME32N文档是否已更改但未保存。我已经计算出了确切的对象,我需要对其属性进行互操作,但其中一些对象在设计时被定义为公共接口,如IF_SERIALIZABLE_MM
,我需要将它们强制转换为本地类,我知道这些对象的实例将是这些类的实例,如\ FUNCTION-POOL=MEGUI\ CLASS=LCL_APPLICATION。
我当然可以尝试动态方法调用,而不关心任何事情,但既然我在这里,我想我应该先问这个问题。
你可以这样做。
REPORT ZPROG1_TEST.
INTERFACE lif_prog1_helper.
METHODS:
test.
ENDINTERFACE.
CLASS LCL_PROG1_HELPER DEFINITION.
PUBLIC SECTION.
INTERFACES:
lif_prog1_helper.
ALIASES:
test FOR lif_prog1_helper~test.
ENDCLASS.
CLASS LCL_PROG1_HELPER IMPLEMENTATION.
METHOD test.
WRITE / sy-repid.
ENDMETHOD.
ENDCLASS.
REPORT ZPROG2_TEST.
DATA: g_test TYPE REF TO object.
START-OF-SELECTION.
CREATE OBJECT g_test TYPE ('PROGRAM=ZPROG1_TESTCLASS=LCL_PROG1_HELPER').
CALL METHOD g_test->('TEST').
CALL METHOD g_test->('LIF_PROG1_HELPER~TEST').
据我所知,这是不可能的。动态访问本地类很容易(好吧,相对容易),但静态地引用它——据我所知还不够。您可能需要动态地调用这些方法。