在我的代码中,我想CLASS_CONSTRUCTOR从static方法中调用该方法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.
Run Code Online (Sandbox Code Playgroud)
您在错误消息中拥有所有信息。您不能(德语: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.
Run Code Online (Sandbox Code Playgroud)
然后将您的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.
Run Code Online (Sandbox Code Playgroud)