【问题标题】:How can I call the class constructor from a static method?如何从静态方法调用类构造函数?
【发布时间】:2019-04-26 06:53:32
【问题描述】:

在我的代码中,我想从静态方法ADD_BOOK 调用CLASS_CONSTRUCTOR 方法。

但是我收到了这个语法错误:

特殊方法“CLASS_CONSTRUCTOR”的直接调用不是 可能。

代码如下:

CLASS lcl_books DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS class_constructor.
    CLASS-METHODS add_book.
    ...
ENDCLASS.

CLASS lcl_books IMPLEMENTATION.
  METHOD class_constructor.
    SELECT * FROM zgib_bmabuecher INTO TABLE gt_return.
  ENDMETHOD.

  METHOD add_book.
    DATA lf_check TYPE n VALUE 0.
    LOOP AT gt_return INTO mf_books.
      IF if_book-isbn = mf_books-isbn.
        lf_check = 1.
      ENDIF.
    ENDLOOP.
    IF lf_check = 0.
      INSERT zgib_bmabuecher FROM if_book.
    ENDIF.
    lcl_books=>class_constructor( ).
  ENDMETHOD.

ENDCLASS.

【问题讨论】:

  • 有关信息,在 7.52 中,语法错误消息被重新排列如下(对问题没有任何改变):“不能直接调用特殊方法“CLASS_CONSTRUCTOR”。”

标签: constructor static abap


【解决方案1】:

您拥有错误消息中的所有信息。您不能(德语:darfst nicht)显式调用类构造函数。每当第一次使用该类时,它总是会自动调用一次。

如果你想重用类构造函数的编码,那就把它放在另一个类方法中,比如这样。

CLASS lcl_books DEFINITION.
  "...
  PRIVATE SECTION.
    CLASS-METHODS:
      select_books.
  "...
ENDCLASS.

CLASS lcl_books IMPLEMENTATION.
  METHOD class_constructor.
    select_books( ).
  ENDMETHOD.

  METHOD select_books.
    SELECT * FROM zgib_bmabuecher INTO TABLE gt_return.
  ENDMETHOD.

然后将您的add_book 方法更改为

METHOD add_book.
    DATA lf_check TYPE n VALUE 0.
    LOOP AT gt_return INTO mf_books.
      IF if_book-isbn = mf_books-isbn.
        lf_check = 1.
      ENDIF.
    ENDLOOP.
    IF lf_check = 0.
      INSERT zgib_bmabuecher FROM if_book.
    ENDIF.
    select_books( ).
  ENDMETHOD.

ENDCLASS.

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多