如何从静态方法调用类构造函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从静态方法调用类构造函数?相关的知识,希望对你有一定的参考价值。

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

但是我收到此语法错误:

不可能直接调用特殊方法“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.
答案

您拥有错误消息中的所有信息。你不能(德语: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.

以上是关于如何从静态方法调用类构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段 KOTLIN 中调用意图 [重复]

c# 有调用一个类的静态方法,是不是执行这个类的构造函数

编写高质量代码改善C#程序的157个建议——建议106:为静态类添加静态构造函数

c#如何创建类 调用

派生类中的静态方法可以在 C++ 中调用受保护的构造函数吗?

静态代码块构造代码块构造函数以及Java类初始化顺序