ABAP创建对象

时间:2009-12-10 07:25:29

标签: abap

以下是创建对象的代码段。

Form userexit_save_document_prepare.
  data: /bks/exitmanager type ref to /bks/exit_manager.
  create object /bks/exitmanager
         exporting main_prog = 'SAPMV45A'
                   exit_form = 'USEREXIT_SAVE_DOCUMENT_PREPARE'.
  include /bks/exitman.
ENDFORM.

我从文档中得到了这个

  

出于性能原因,在userexits的情况下,应填充参数“main_prog”和“exit_form”,这些参数经常执行,例如“SAPMV45A”中的“user_field_modification”,每个屏幕字段都会调用它。 / p>

1)调用create / bks / exitmanager时究竟发生了什么?为对象分配的内存等?

2)为什么出于性能原因需要填充create对象的导出参数?

3 个答案:

答案 0 :(得分:1)

我不是百分百肯定,但这是我最好的猜测:

  1. 构造了一个名为/ bks / exitmanager的对象(它是类/ bks / exit_manager的一个对象,或者更具体的一个对该类对象的引用/“指针”)..分配所需的内存等。,还调用了“构造函数”代码(可能会将一些实例变量设置为传递给调用)。

  2. 如果您明确传递这些参数,则不必在运行时“计算”它们(例如,通过查看调用堆栈)。这应该节省一些时间,特别是如果必须经常进行(如文档中所述)。

答案 1 :(得分:0)

查看/ bks / exit_manager实际上是什么,以及您要完成的内容的简要说明将会有所帮助。

扩展IronGoofy写的内容:

data:/ bks / exitmanager type ref to / bks / exit_manager 这会在程序的ABAP内存中创建一个引用指针,就像字段符号一样。它也必须已经被推迟了。如果它在include中,则需要移动include。

创建object / bks / exitmanager   导出main_prog ='SAPMV45A'             exit_form ='USEREXIT_SAVE_DOCUMENT_PREPARE'。 这将基于声明的类创建一个对象实例,并将其分配给referance指针。它通过首先调用构造函数方法来完成此操作。 只有通过考试/ bks / exit_manager才能确切了解您需要导出的内容。

答案 2 :(得分:0)

如果没有看一下/ BKS / EXIT_MANAGER的构造函数,就不可能知道发生了什么以及为什么要传递参数。虽然保持设置缓冲区是一种常见的模式(想象一下静态哈希表,其中键是参数,值保存任何复杂且耗时的内容)。在这种情况下,我本来期望一个无法直接访问的受保护构造函数,但只使用一个静态工厂方法,该方法使用散列表来保留退出处理程序本身的引用 - 最佳使用弱引用...