小编ACu*_*ind的帖子

有没有一种有效的方法来避免实例化带有语法错误的类?

您可能知道,拥有包含语法错误的类的活动代码非常容易(例如,有人激活了该代码而忽略了语法警告,或者有人更改了该类调用的方法的签名)。

这意味着还可以通过

CREATE OBJECT my_object TYPE (class_name).
Run Code Online (Sandbox Code Playgroud)

将失败,并出现明显无法捕获的SYNTAX_ERROR异常。目标是编写在发生这种情况时不会终止的代码。

已知解决方案:

  1. 将CREATE OBJECT语句包装在RFC函数模块中,以目标NONE调用该模块,然后从RFC调用中捕获(经典)异常SYSTEM_FAILURE。如果RFC成功,则实际创建对象(您不能将创建的对象传递到RFC之外,因为据我所知,RFC功能模块无法传递引用,并且只能通过引用传递对象)。

    由于RFC调用产生了一个全新的LUW,因此该解决方案不仅笨拙,而且还会严重影响性能。另外,您实际上并没有阻止SYNTAX_ERROR转储,只是让它转入您不关心的线程中。它仍然会令人讨厌地显示在ST22中。

  2. 在尝试实例化该类之前,请致电

    cl_abap_typedescr=>describe_by_name( class_name )
    
    Run Code Online (Sandbox Code Playgroud)

    并捕获当它尝试描述的代码具有语法错误时引发的基于类的异常CX_SY_RTTI_SYNTAX_ERROR。

    与RFC变体相比,此方法的性能要好得多,但似乎仍会增加不必要的开销-通常,我不希望describe_by_name返回类型信息,我只是调用它来获取可捕获的异常,而当它成功时,其结果是扔掉。

有没有办法防止SYNTAX_ERROR转储而不增加这种开销?

sap abap

5
推荐指数
1
解决办法
281
查看次数

标签 统计

abap ×1

sap ×1