Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何在ABAP对象中将填充结构/表格定义为类常量_Oop_Abap - Fatal编程技术网

Oop 如何在ABAP对象中将填充结构/表格定义为类常量

Oop 如何在ABAP对象中将填充结构/表格定义为类常量,oop,abap,Oop,Abap,我想要一个不可变的预定义表作为类变量。如何定义这样一个变量?我将创建一个属性并将其标记为“只读”,您可以通过构造函数或set方法进行设置。在ABAP中使用类常量无法做到这一点。政府明确表示: 您可以为ABAP类型字符串和 仅限xstring 常量内部表、引用变量和结构不包含 纯字符类平面组件可以指定其初始值 值by仅为初始值,因此始终为初始值。 正如Tapio所建议的,您唯一的选择是只读属性,我还建议您使用静态属性,它可以在构造函数中初始化 比如说 CLASS lcl_test DEFINI

我想要一个不可变的预定义表作为类变量。如何定义这样一个变量?

我将创建一个属性并将其标记为“只读”,您可以通过构造函数或set方法进行设置。

在ABAP中使用类常量无法做到这一点。政府明确表示:

  • 您可以为ABAP类型字符串和 仅限xstring

  • 常量内部表、引用变量和结构不包含 纯字符类平面组件可以指定其初始值 值by仅为初始值,因此始终为初始值。

正如Tapio所建议的,您唯一的选择是只读属性,我还建议您使用静态属性,它可以在构造函数中初始化

比如说

CLASS lcl_test DEFINITION.
  PUBLIC SECTION.
  CLASS-DATA: itab TYPE RANGE OF i READ-ONLY.
  METHODS:
      constructor.
ENDCLASS.
CLASS lcl_test IMPLEMENTATION.
  METHOD constructor.
      itab = VALUE #( sign = 'I'  option = 'BT' ( low = 1  high = 10 )
                                                ( low = 21 high = 30 )
                                                ( low = 41 high = 50 )
                                  option = 'GE' ( low = 61 )  ).
  ENDMETHOD.
ENDCLASS.

在所有这些时间之后,有一件事将是一个解决办法,那就是:

  • 创建您的列表
  • 序列化它并将其另存为只读字符串
  • 创建一个对其进行反序列化的getter

    • 这是一个老问题,答案很简单: 只需创建一个返回常量数据的静态方法(getter)

      而不是使用:

      data(ls_sample) = lcl_myclass=>cs_data.
      
      使用:


      如果它有一个set.method,它是不可变的吗?只读属性可以从类内更改,所以它不是不可变的。只读属性可以从类内更改,所以它不是不可变的。“另存为常量?”这是什么意思?
      data(ls_sample) = lcl_myclass=>cs_data( ).