当前CLASS POOL中PUBLIC类的名称必须为“ ...”而不是“ ...”

kon*_*tin 1 abap

我正在尝试通过在transaction中单击“本地定义/实现”在Z_MY_LOCAL_CLASS全局类(Z_MY_GLOBAL_CLASS)中创建本地类()se24

按钮“本地定义/实现”

然后,将另一个类的源代码从其基于源代码的视图复制到单击“本地定义”按钮后显示的文本区域中。

在此处输入图片说明

*"* use this source file for the definition and implementation of
*"* local helper classes, interface definitions and type
*"* declarations

class Z_MY_LOCAL_CLASS definition
  public
  final
  create public .

public section.

  class-methods SOME_STATIC_METHOD
    importing
      !IS_IS type Z_SOME_TYPE
    returning
      value(RS_RETURN) type Z_SOME_TYPE .
protected section.
private section.
ENDCLASS.



CLASS Z_MY_LOCAL_CLASS IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method Z_MY_LOCAL_CLASS=>SOME_STATIC_METHOD
* +-------------------------------------------------------------------------------------------------+
* | [--->] IS_IN                   TYPE        Z_SOME_TYPE
* | [<-()] RS_RETURN               TYPE        Z_SOME_TYPE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  method SOME_STATIC_METHOD.
    "" some coding
  endmethod.
ENDCLASS.
Run Code Online (Sandbox Code Playgroud)

尝试激活编码时,我收到以下消息:

当前CLASS POOL中PUBLIC类的名称必须为“ Z_MY_GLOBAL_CLASS”,而不是“ Z_MY_LOCAL_CLASS”。

或德语:

在PUBLIC-Klasse im Aktuellen CLASS-POOL中命名为“ Z_MY_GLOBAL_CLASS”的状态为“ Z_MY_LOCAL_CLASS”。

这是什么意思?

kon*_*tin 5

在SAP / ABAP中,错误消息通常不会描述实际错误。在本地类的定义中,更改以下行

class Z_MY_LOCAL_CLASS definition
  public
  final
  create public .
Run Code Online (Sandbox Code Playgroud)

对此

class Z_MY_LOCAL_CLASS definition final create public.
Run Code Online (Sandbox Code Playgroud)

它应该编译。因此,问题在于只允许包含全局类public。将源代码从现有全局类复制/迁移到本地类时,必须删除这些行。

  • 几乎正确。实际上是“ public”限定符,它干扰了编译器,因为它声明该类可通过数据字典可见。“ create public”修正案仅声明该类可通过“ new”实例化,并且在私有类中广为接受。 (4认同)