Last active
November 2, 2020 12:52
-
-
Save alezhu/edc3918192fedf8196b0c28b3c84b4d0 to your computer and use it in GitHub Desktop.
Strange behaviour of class casting
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
REPORT ztest_class_ref_data. | |
CLASS lcl_abstract_data DEFINITION ABSTRACT.ENDCLASS. | |
CLASS lcl_abstract_processor DEFINITION ABSTRACT. | |
PUBLIC SECTION. | |
METHODS constructor IMPORTING io_data TYPE REF TO lcl_abstract_data. | |
PROTECTED SECTION. | |
DATA mo_data TYPE REF TO lcl_abstract_data. | |
ENDCLASS. | |
CLASS lcl_abstract_processor IMPLEMENTATION. | |
METHOD constructor. | |
mo_data = io_data. | |
ENDMETHOD. | |
ENDCLASS. | |
CLASS lcl_data DEFINITION INHERITING FROM lcl_abstract_data. | |
PUBLIC SECTION. | |
TYPES tt_data TYPE STANDARD TABLE OF i WITH EMPTY KEY. | |
DATA mt_data TYPE tt_data. | |
CLASS-METHODS cast | |
IMPORTING io_data TYPE REF TO lcl_abstract_data | |
RETURNING VALUE(ro_data) TYPE REF TO lcl_data. | |
METHODS print . | |
ENDCLASS. | |
CLASS lcl_data IMPLEMENTATION. | |
METHOD cast. | |
ro_data ?= io_data. | |
ENDMETHOD. | |
METHOD print. | |
LOOP AT mt_data INTO DATA(lv_value). | |
WRITE lv_value. NEW-LINE. | |
ENDLOOP. | |
ULINE. | |
ENDMETHOD. | |
ENDCLASS. | |
CLASS lcl_processor DEFINITION INHERITING FROM lcl_abstract_processor. | |
PUBLIC SECTION. | |
METHODS process . | |
METHODS process2. | |
METHODS process3. | |
ENDCLASS. | |
CLASS lcl_processor IMPLEMENTATION. | |
METHOD process. | |
DATA(lo_data) = lcl_data=>cast( mo_data ). | |
LOOP AT lo_data->mt_data ASSIGNING FIELD-SYMBOL(<v_value>). | |
ADD 1 TO <v_value>. | |
ENDLOOP. | |
ENDMETHOD. | |
METHOD process2. | |
LOOP AT CAST lcl_data( mo_data )->mt_data ASSIGNING FIELD-SYMBOL(<v_value>). | |
ADD 1 TO <v_value>. | |
ENDLOOP. | |
ENDMETHOD. | |
METHOD process3. | |
LOOP AT lcl_data=>cast( mo_data )->mt_data ASSIGNING FIELD-SYMBOL(<v_value>). | |
ADD 1 TO <v_value>. | |
ENDLOOP. | |
ENDMETHOD. | |
ENDCLASS. | |
START-OF-SELECTION. | |
DATA(lo_data) = NEW lcl_data( ). | |
lo_data->mt_data = VALUE #( ( 1 ) ( 2 ) ). | |
DATA(lo_processor) = NEW lcl_processor( lo_data ). | |
lo_data->print( ). | |
lo_processor->process( ). | |
lo_data->print( ). | |
lo_processor->process2( ). | |
lo_data->print( ). | |
lo_processor->process3( ). | |
lo_data->print( ). |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment