SAP ABAP里存在类似的集合工具类

 

实现方式-:传统的实现

"定义一个Table Line类型为通用的对象引用(TYPE REF TO OBJECT)的内表lt_shape,用于存放圆形和长方形的实例对象引用。
TYPES:BEGIN OF TY_SHAPE,
        SHAPE TYPE REF TO OBJECT,
      END OF TY_SHAPE.
TYPES:TT_SHPAE TYPE STANDARD TABLE OF TY_SHAPE.
DATA:LT_SHAPE  TYPE TT_SHPAE,
     LV_RESULT TYPE FLOAT.
"每次创建圆形或者长方形的对象实例之后,添加到内表中,然后LOOP内表,逐行取出元素,
"用IS INSTANCE OF关键字,判断当前记录指向的是圆形还是长方形实例,再用CAST进行强制类型转换,调用对应的面积计算方法。
DATA(LO_CIRCLENEW ZCL_CIRCLE).
DATA(ENTRYVALUE TY_SHAPE( SHAPE = LO_CIRCLE ).
APPEND ENTRY TO LT_SHAPE.

DATA(LO_RECTANGLENEW ZCL_RECTANGLE( IV_HEIGHT 1 IV_WIDTH ).
ENTRY VALUE TY_SHAPE( SHAPE = LO_RECTANGLE ).
APPEND ENTRY TO LT_SHAPE.
LOOP AT LT_SHAPE ASSIGNING FIELD-SYMBOL(<FS_SHAPE>).
  IF <FS_SHAPE>-SHAPE IS INSTANCE OF ZCL_CIRCLE.
    LV_RESULT = LV_RESULT + CAST ZCL_CIRCLE( <FS_SHAPE>-SHAPE )->GET_AREA).
  ELSEIF <FS_SHAPE>-SHAPE IS INSTANCE OF ZCL_RECTANGLE.
    LV_RESULT = LV_RESULT + CAST ZCL_RECTANGLE( <FS_SHAPE>-SHAPE )->GET_AREA).
  ENDIF.
  WRITE:/ LV_RESULT.
ENDLOOP.

实现方式二:

借助CL_OBJECT_COLLECTION, 采取面向对象编程里多态(Polymorphism)的思路,我们不仅避免了丑陋的IF-ELSE,繁琐的类型探测IS INSTANCE OF和强制类型转换CAST

同时将代码行数从37行减少到了20行。将来要是得增加对其他图形的支持,只需要新建图形类并实现,而无需修改下面的计算逻辑。

 DATA:LV_RESULT TYPE FLOAT.
DATA(LO_CONTAINERNEW CL_OBJECT_COLLECTION).
DATA(LO_CIRCLE1NEW ZCL_CIRCLE).
LO_CONTAINER->ADD( LO_CIRCLE1 ).

DATA(LO_CIRCLE2NEW ZCL_CIRCLE).
LO_CONTAINER->ADD( LO_CIRCLE2 ).

DATA(LO_RECTANGLE1NEW ZCL_RECTANGLE( IV_HEIGHT 1 IV_WIDTH ).
LO_CONTAINER->ADD( LO_RECTANGLE1 ).

DATA(LO_ITERATOR= LO_CONTAINER->GET_ITERATOR).
WHILE LO_ITERATOR->HAS_NEXT).
  DATA(LO_SHAPE= CAST ZIF_SHAPE( LO_ITERATOR->GET_NEXT).
  LV_RESULT = LV_RESULT + LO_SHAPE->GET_AREA).
ENDWHILE.
WRITE:/ LV_RESULT.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892816.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达梦数据库连接配置

官网下载 达梦官网驱动下载:DmJdbcDriver6、DmJdbcDriver7、DmJdbcDriver8、DmJdbcDriver11官网下载地址:https://eco.dameng.com/download/滑倒网页最下方有驱动下载 DBeaver工具连接达梦数据库添加驱动打开 DBeaver,选择“数据库”->“驱动管理器”->“新建”“创建…

适配器设计模式--java进阶day03

1.设计模式 通俗来讲,设计模式就是其他程序员遇到某些问题时的解决经验,我们学习设计模式,在遇到了同样的问题后便可解决2.适配器设计模式有人可能会感到疑惑,接口和实现类会有什么问题,我们举两个例子 刚学的键盘监听,我们要使用里面的一个方法,但另外两个方法对我们来…

以防你不知道书签还能玩出什么花来

说到书签,你可能会认为它不就是用来保存网址的嘛,还能有什么花头?其实不然,它能做的事有很多,包括运行 JS 代码、将网页变成记事本、前端编辑器、计算器......说到书签,你可能会认为它不就是用来保存网址的嘛,还能有什么花头? 其实不然,它能做的事有很多,包括运行 JS…

如何避开传统文件外发方式的坑,实现文件外发权限管理?

在数字化浪潮中,企业数据已然成为核心资产,其重要性不言而喻。但数据安全事件却频频发生,给企业带来了沉重的打击。就拿2024年美国思科公司的重大数据泄露事件来说,Verizon、AT&T、微软等全球多家大厂的源代码、机密文件和登录凭证均被泄露,这些数据甚至在暗网被公然售…

错误:无法下载版本1.1.20190528的Extensions模块。它是内置的模块吗?请尝试执行genexus.exe /install命令。否则,请将模块版本更新为可访问的版本。

报错—— 错误:无法下载版本1.1.20190528的Extensions模块。它是内置的模块吗?请尝试执行genexus.exe /install命令。否则,请将模块版本更新为可访问的版本。 解决方法—— 知识库管理——》管理引用模块 找到这个——》更新 然后重新编译就行了

pip命令找不到问题的解决

问题描述 想要下载相应的包和依赖,发现爆出这个错误:pip command not found... 问题解决 wget https://bootstrap.pypa.io/pip/2.7/get-pip.pypython get-pip.py完美解决: 使用pip install jupyter命令通过:

HTML网站上传图片的同时,将图片显示在页面里面

具体代码 <input type="file" class="form-control" name="file" id="input_img"> <img id="show_img" src="" style="width: 150px;height: 100px"><script>var getUserPhoto = doc…

python下载win32gui的库失败解决教程

1、进入这个网站https://www.lfd.uci.edu/~gohlke/pythonlibs/ 界面如下: 因为这些安装包都是按照字母顺序排序的,所以就向下翻到pywin32的位置就行; 选择跟自己的python版本相对应的这个库的版本,点击即可下载; 等待下载完成: 2、进入到pycharm软件里面,运用命令实现库…

大三下每日打卡007

把pcl配置进visual studio2022了,非常麻烦,下面是我用欧式聚类算法得到的效果图 1. 安装 PCL 首先,确保您已经正确安装了 PCL。您可以通过以下几种方式进行安装:通过 PCL 官网安装:下载并安装 PCL。 通过 vcpkg 安装:如果您熟悉 vcpkg,可以使用以下命令安装 PCL: bash …

使用AI训练,实现课前测试

根据文档内容,我将以下文字喂给AI 帮我生成一个springboot+vue3前后端分离的项目 一、设计表 (1)仓库表(支持多个仓库,每个仓库具有唯一编码);(1分) (2)物资台账明细表(除了需求描述的要求外,需要有台账编号(唯一标识,四位年两位月两位日+顺序号(四位)例如:2…

DeepSeek 官方推出的提示词库,AI内容生成的精准导航仪!

前言 在当今数字化时代,人工智能(AI)正以前所未有的速度改变着我们的生活方式和工作模式。从简单的数据处理到复杂的创意生成,AI技术正逐渐渗透到各个领域,成为推动社会进步的重要力量。然而,如何高效地利用AI技术进行内容创作,一直是许多用户面临的难题。 今天大姚给大…

DeepSeek指令手册大全,《让AI对话像聊天一样简单》!

DeepSeek指令手册大全,《让AI对话像聊天一样简单》!随着DeepSeek的开源普及,越来越多的人开始使用这一工具。虽然DeepSeek-R1在提示词的依赖上较DeepSeek-V3、ChatGPT等大模型有所降低,但掌握和学习AI指令仍然至关重要。不仅能帮助用户更高效地使用DeepSeek,还能提高工作效…