美文网首页
ABAP New Features - OO programmi

ABAP New Features - OO programmi

作者: LiuliuZhang | 来源:发表于2017-07-28 09:31 被阅读0次

Upcasting/ Downcasting with CAST

7.4前,通过cl_abap_typedescr取得structure的metadata,然后调用components方法取得结构中所有字段信息到内表中,7.4后,通过CAST将代码写到一行中,变得更加简单了。

*--------------------------------------------------------------------*
* Listing 2.76 Components of a Specific Dictionary Structure without CAST
*--------------------------------------------------------------------*
    DATA structure_description TYPE REF TO cl_abap_structdescr.
    structure_description ?= cl_abap_typedescr=>describe_by_name( 'ZSC_MONSTER_HEADER' ).
    DATA structure_components TYPE abap_compdescr_tab.
    structure_components = structure_description->components.

*--------------------------------------------------------------------*
* Listing 2.77 Components of a Specific Dictionary Structure with CAST
*--------------------------------------------------------------------*
    DATA(structure_components2) = CAST cl_abap_structdescr(
    cl_abap_typedescr=>describe_by_name( 'ZSC_MONSTER_HEADER' ) )->components.

Finding the Subclass of an Object Instance

如下代码,io_salv_adapter参数的类型为父类,实际传入的是它的子类,在方法中判断时,以前通过?=类型转换是否成功。后来引入了IS INSTANCE OF来判断,还可以用CASE语句来判断。

    DATA: full_screen_adapter TYPE REF TO cl_salv_fullscreen_adapter,
          container_adapter   TYPE REF TO cl_salv_grid_adapter.
    TRY.
        full_screen_adapter ?= io_salv_adapter.
        "Get the Grid
        ro_alv_grid = full_screen_adapter->get_grid( ).
      CATCH cx_sy_move_cast_error.
        container_adapter ?= io_salv_adapter.
        ro_alv_grid = container_adapter->get_grid( ).
    ENDTRY.

*--------------------------------------------------------------------*
* Listing 2.79 : Trying to find the subclass in 7.50
*--------------------------------------------------------------------*
    IF io_salv_adapter IS INSTANCE OF cl_salv_fullscreen_adapter.
      full_screen_adapter ?= io_salv_adapter.
      ro_alv_grid = full_screen_adapter->get_grid( ).
    ELSEIF io_salv_adapter IS INSTANCE OF cl_salv_grid_adapter.
      container_adapter ?= io_salv_adapter.
      ro_alv_grid = container_adapter->get_grid( ).
    ENDIF.

*--------------------------------------------------------------------*
* Listing 2.80 : Another way to find the subclass in 7.50
*--------------------------------------------------------------------*
    CASE TYPE OF io_salv_adapter.
      WHEN TYPE cl_salv_fullscreen_adapter INTO DATA(full_screen_adapter2).
        ro_alv_grid = full_screen_adapter2->get_grid( ).
      WHEN TYPE cl_salv_grid_adapter INTO DATA(container_adapter2).
        ro_alv_grid = container_adapter2->get_grid( ).
      WHEN OTHERS.
        RETURN.
    ENDCASE.

相关文章

网友评论

      本文标题:ABAP New Features - OO programmi

      本文链接:https://www.haomeiwen.com/subject/jzyzkxtx.html