前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP-CL_OBJECT_COLLECTION工具类

ABAP-CL_OBJECT_COLLECTION工具类

作者头像
Tab Zhu
发布2022-06-27 17:26:31
2610
发布2022-06-27 17:26:31
举报
文章被收录于专栏:TAB的coding生活TAB的coding生活

Title

ABAP-CL_OBJECT_COLLECTION

本文参考Jerry Wang的程序学习了使用abap来实现java中ArrayList的功能,参考文章SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下

代码

代码我是写在了本地,以便更容易看懂,主要用到了类接口和多态的思想,来避免重复造轮子。

REPORT ztest_polymorphism.

"定义接口

INTERFACE zif_shape. METHODS get_area RETURNING VALUE(rv_result) TYPE float. ENDINTERFACE. "定义计算圆面积 CLASS zcl_circle DEFINITION. PUBLIC SECTION. INTERFACES zif_shape. METHODS constructor IMPORTING !iv_radius TYPE float ."构造器,输入半径 PROTECTED SECTION. PRIVATE SECTION. DATA radius TYPE float . ENDCLASS. CLASS zcl_circle IMPLEMENTATION. METHOD constructor. me->radius = iv_radius. ENDMETHOD. METHOD zif_shape~get_area. CONSTANTS: pai TYPE float VALUE '3.14'. rv_result = pai * radius * radius. ENDMETHOD. ENDCLASS. "定义计算矩形面积 CLASS zcl_rectangle DEFINITION. PUBLIC SECTION. INTERFACES zif_shape. METHODS constructor IMPORTING !iv_height TYPE float !iv_width TYPE float . PROTECTED SECTION. PRIVATE SECTION. DATA height TYPE float . DATA width TYPE float . ENDCLASS. CLASS zcl_rectangle IMPLEMENTATION. METHOD constructor. height = iv_height. width = iv_width. ENDMETHOD. METHOD zif_shape~get_area. rv_result = width * height. ENDMETHOD. ENDCLASS. "定义计算三角形面积 CLASS zcl_triangle DEFINITION. PUBLIC SECTION. INTERFACES zif_shape. METHODS constructor IMPORTING !iv_side TYPE float !iv_height TYPE float . PROTECTED SECTION. PRIVATE SECTION. DATA side TYPE float . DATA height TYPE float . ENDCLASS. CLASS zcl_triangle IMPLEMENTATION. METHOD constructor. side = iv_side. height = iv_height. ENDMETHOD. METHOD zif_shape~get_area. rv_result = ( 1 / 2 ) * side * height. ENDMETHOD. ENDCLASS.

TYPES: BEGIN OF ty_shape, shape TYPE REF TO object, END OF ty_shape. TYPES: tt_shape TYPE STANDARD TABLE OF ty_shape. DATA: lt_shape TYPE tt_shape,"定义一个内表来存放不同的实例 lv_result TYPE float.

START-OF-SELECTION. "借助CL_OBJECT_COLLECTION, 采取面向对象编程里多态(Polymorphism)的思路 DATA(lo_container) = NEW cl_object_collection( ). DATA(lo_circle) = NEW zcl_circle( 1 ). lo_container->add( lo_circle )." DATA(lo_rectangle) = NEW zcl_rectangle( iv_width = 1 iv_height = 2 ). lo_container->add( lo_rectangle ). DATA(lo_triangle) = NEW zcl_triangle( iv_height = 2 iv_side = 3 ). lo_container->add( lo_triangle ). DATA(lo_iterator) = lo_container->get_iterator( )."获取了一个迭代器 WHILE lo_iterator->has_next( )."CL_OBJECT_COLLECTION_ITERATOR DATA(lo_shape) = CAST zif_shape( lo_iterator->get_next( ) )."根据不同的类,返回值 lv_result = lv_result + lo_shape->get_area( ). ENDWHILE. WRITE:/ lv_result."圆,三角形,长方形的合计值 "这里可以实现将不同的实例加入到LT_SHAPE内表中,

DATA(entry) = VALUE ty_shape( shape = lo_circle ). APPEND entry TO lt_shape. entry = VALUE ty_shape( shape = lo_rectangle ). APPEND entry TO lt_shape. entry = VALUE ty_shape( shape = lo_iterator ). APPEND entry TO lt_shape. CLEAR lv_result.

LOOP AT lt_shape REFERENCE INTO DATA(lr_shape). lo_shape = CAST zif_shape( lr_shape->shape ). lv_result = lv_result + lo_shape->get_area( ). ENDLOOP. WRITE:/ lv_result."圆,三角形,长方形的合计值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAP TAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档