https://blog.csdn.net/yang362046076/article/details/51578749

NEW实例操作符

了解JAVA的知道,我们可以new一个对象实例出来,现在ABAP也可以这样了。NEW可以创建匿名的数据对象或者类的实例。匿名就是new出来的对象没有名字。。。因为后面不需要这个对象了,只是为了new出来赋值给左边的对象(赋值也不太对,就指向。。。),一次使用,简化代码。具体参考java匿名类

    一般用到的3种形式后面例子详细解释

1.... NEW dtype value ) ...

创建一个类型为dtype的匿名数据对象,然后传值给创建的对象(左操作符)。

2.... NEW class p1 = a 1 p2 = a2 ... ) ...

创建一个名为class类的实例,并且传参到实例的构造函数。

3.... NEW # ... ) ...

根据操作数类型创建一个匿名数据对象或者一个类的实例。 a = new # ... ), new #( ... )这里创建的匿名类是参考a的类型来的,即和a的类型一致。

举例说明一下:

   1.new 数据对象

     before 7.4

  1. FIELD-SYMBOLS <fS> TYPE data.
  2. DATA dref TYPE REF TO data.
  3. CREATE DATA dref TYPE i.
  4. ASSIGN dref->* TO <fs>.
  5. <fs> = 555.

    with 7.4

  1. DATA dref TYPE REF TO data.
  2. dref = NEW i( 555 ).

    2.new 类实例

     before 7.4

  1. DATA oref TYPE REF TO class. "这里class是一个类名
  2. CREATE OBJECT oref EXPORTING ...

with 7.4

  1. DATA oref TYPE REF TO class.
  2. oref = NEW #( ... ).

或者:

  1. DATA oref TYPE REF TO class.
  2. oref = NEW #( ... ).

 

最后举一个综合的例子:

  1. TYPES: BEGIN OF t_struct1,
  2. col1 TYPE i,
  3. col2 TYPE i,
  4. END OF t_struct1,
  5. BEGIN OF t_struct2,
  6. col1 TYPE i,
  7. col2 TYPE t_struct1,
  8. col3 TYPE TABLE OF t_struct1 WITH EMPTY KEY,
  9. END OF t_struct2,
  10. t_itab TYPE TABLE OF t_struct2 WITH EMPTY KEY.
  11. DATA(dref) =
  12. NEW t_itab( ( col1 = 1
  13. col2-col1 = 1
  14. col2-col2 = 2
  15. col3 = VALUE #( ( col1 = 1 col2 = 2 ) "VALUE 下篇会讲
  16. ( col1 = 3 col2 = 4 ) ) )
  17. ( col1 = 2
  18. col2-col1 = 2
  19. col2-col2 = 4
  20. col3 = VALUE #( ( col1 = 2 col2 = 4 )
  21. ( col1 = 6 col2 = 8 ) ) ) ).
  22. <span class="L0S52">WRITE</span><span class="L0S55">: </span>dref<span class="L0S70">-></span>*[ <span class="L0S32">1 </span>]<span class="L0S70">-</span>col1<span class="L0S55">, </span>dref<span class="L0S70">-></span>*[ <span class="L0S32">2 </span>]<span class="L0S70">-</span>col1<span class="L0S55">. "</span>

 

这个程序定义了两个结构t_struct1 t_struct2,其中t_struct2deep struct,因为它的col3是参考t_struct1的表类型。那么后面那段代码,就是定义了一个dref引用类型变量,该变量指向的

对象类型和t_itab类型相同。然后利用newvalue来为匿名对象初始化数据,然后把这个匿名对象赋值给dref。这时候dref就有2行数据了。可以拷贝这段代码然后断点看dref指向的内容。