当前位置:网站首页>ABAP-CL_OBJECT_COLLECTION工具类
ABAP-CL_OBJECT_COLLECTION工具类
2022-06-27 17:57:00 【Tab Zhu】
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."圆,三角形,长方形的合计值
边栏推荐
- 教你打印自己的日志 -- 如何自定义 log4j2 各组件
- 驾驭一切的垃圾收集器 -- G1
- DCC888 :Register Allocation
- OpenSSL client programming: SSL session failure caused by an obscure function
- 让单测变得如此简单 -- spock 框架初体验
- 形参的默认值-及return的注意事项-及this的使用-和箭头函数的知识
- 作为软件工程师,给年轻时的自己的建议(下)
- Informatics Olympiad 1333: [example 2-2] blah data set | openjudge noi 3.4 2729:blah data set
- Erreur Keil de Huada Single Chip Computer La solution de Weak
- 数仓的字符截取三胞胎:substrb、substr、substring
猜你喜欢

429-二叉树(108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树、 106.从中序与后序遍历序列构造二叉树、235. 二叉搜索树的最近公共祖先)

Don't worry. This is the truth about wages in all industries in China

基于STM32F103ZET6库函数蜂鸣器实验

过关斩将,擒“指针”(下)

Blink SQL内置函数大全

从感知机到前馈神经网络的数学推导

DFS and BFS simple principle

Running lantern experiment based on stm32f103zet6 library function

Mathematical derivation from perceptron to feedforward neural network

binder hwbinder vndbinder
随机推荐
Workflow automation low code is the key
Labelimg usage guide
DFS and BFS simple principle
一对一关系
现在网上买股票开户身份证信息安全吗?
Bit. Store: long bear market, stable stacking products may become the main theme
VS code 运行yarn run dev 报yarn : 无法加载文件XXX的问题
【云驻共创】高校数字化差旅建设“解决之道”
Informatics Orsay all in one 1335: [example 2-4] connected block
1028 List Sorting
谈谈线程安全
DCC888 :Register Allocation
让单测变得如此简单 -- spock 框架初体验
Where to look at high-yield bank financial products?
使用logrotate对宝塔的网站日志进行自动切割
运算符的基础知识
New Zhongda chongci scientific and Technological Innovation Board: annual revenue of 284million and proposed fund-raising of 557million
高收益银行理财产品在哪里看?
工作流自动化 低代码是关键
从感知机到前馈神经网络的数学推导