当前位置: 首页 > article >正文

ABAP-OO:(7)类对象的动态创建和调用

在 ABAP 面向对象开发中动态创建数据、动态创建对象、动态调用方法是实现灵活架构、低耦合、可配置化的关键技术。它区别于静态编码核心特点是类型与行为不在编译期固定而是在程序运行时动态决定。一、什么是动态创建静态创建平时写代码我们都是写死类型、写死类名、写死方法编译时就确定了。动态创建程序跑起来以后才决定创建什么、调用什么。二、动态创建类对象动态创建对象是指根据类名字符串在运行时实例化对应的类对象常配合自定义配置表使用实现工厂模式、策略模式等灵活架构。语法CREATE OBJECT 引用变量 TYPE (类名).动态创建三大注意点类名必须大写动态创建时字符串必须大写否则系统找不到类。确认类可直接实例化类需定义为CREATE PUBLIC不能是抽象类、单例限制类。必须使用 TRY…CATCH 捕获异常避免因类名错误、类不存在导致程序 DUMP。动态创建类对象示例代码CLASS zlcl_class DEFINITION. PUBLIC SECTION. DATA: mv_value TYPE string. METHODS: set_value IMPORTING iv_value TYPE string, display_value. ENDCLASS. CLASS zlcl_class IMPLEMENTATION. METHOD display_value. WRITE:/ Class Instance Attribute:, mv_value. ENDMETHOD. METHOD set_value. mv_value iv_value. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: go_oref TYPE REF TO zlcl_class. DATA: exc_ref TYPE REF TO cx_root, exc_text TYPE string. TRY. CREATE OBJECT go_oref TYPE (ZLCL_CLASS). go_oref-set_value( Test String ). go_oref-display_value( ). CATCH cx_sy_create_object_error INTO exc_ref. exc_text exc_ref-get_text( ). MESSAGE exc_text TYPE I. ENDTRY.运行结果Class Instance Attribute: Test String三、动态调用方法语法方法名必须大写方法需为PUBLIC权限CALL METHOD 实例-(方法名字符串).动态调用方法示例代码CLASS zcl_product IMPLEMENTATION. METHOD print_desc. WRITE: / Print PRODUCT. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: lo_product TYPE REF TO zcl_product. DATA: lv_type_name TYPE string VALUE ZCL_PRODUCT. DATA: lv_method_name TYPE string VALUE PRINT_DESC. DATA: exc_ref TYPE REF TO cx_root, exc_text TYPE string. TRY. CREATE OBJECT lo_product TYPE (lv_type_name). CALL METHOD lo_product-(lv_method_name). CATCH cx_sy_create_object_error INTO exc_ref. exc_text exc_ref-get_text( ). MESSAGE exc_text TYPE I. ENDTRY.运行结果Print PRODUCT四、使用场景与价值CREATE OBJECT的应用场景广泛下表总结了其主要使用场景基本对象实例化标准ABAP对象创建动态编程运行时确定类名、动态类型实例化设计模式实现工厂模式、单例模式的对象创建控制框架开发插件系统、动态UI组件创建、规则引擎等数据封装创建业务实体对象、数据传输对象DTO为什么要进行动态创建类对象平时写代码的案例IF 业务 WMS. lo_obj NEW zcl_wms( ). ELSEIF 业务 OA. lo_obj NEW zcl_oa( ). ELSEIF 业务 CRM. lo_obj NEW zcl_crm( ). ... ENDIF.问题试想一下当IF需要到达一百条时程序是怎么样硬编码、难维护加业务必须改代码、传输代码臃肿、不优雅使用工厂模式 动态创建 多态的用法不写死类名、不写死判断、完全由变量决定、扩展不用改程序的示例代码*----------------------------------------------------------------------* * 接口统一契约 *----------------------------------------------------------------------* INTERFACE zif_handler. METHODS execute IMPORTING iv_data TYPE string. ENDINTERFACE. *----------------------------------------------------------------------* * 实现类1企业微信 *----------------------------------------------------------------------* CLASS zcl_wechat DEFINITION CREATE PUBLIC. PUBLIC SECTION. INTERFACES zif_handler. ENDCLASS. CLASS zcl_wechat IMPLEMENTATION. METHOD zif_handler~execute. WRITE: / 企业微信处理, iv_data. ENDMETHOD. ENDCLASS. *----------------------------------------------------------------------* * 实现类2OA *----------------------------------------------------------------------* CLASS zcl_oa DEFINITION CREATE PUBLIC. PUBLIC SECTION. INTERFACES zif_handler. ENDCLASS. CLASS zcl_oa IMPLEMENTATION. METHOD zif_handler~execute. WRITE: / OA 处理, iv_data. ENDMETHOD. ENDCLASS. *----------------------------------------------------------------------* * 实现类3WMS *----------------------------------------------------------------------* CLASS zcl_wms DEFINITION CREATE PUBLIC. PUBLIC SECTION. INTERFACES zif_handler. ENDCLASS. CLASS zcl_wms IMPLEMENTATION. METHOD zif_handler~execute. WRITE: / WMS 处理, iv_data. ENDMETHOD. ENDCLASS. *----------------------------------------------------------------------* * 【重点来了】 * 主程序完全不知道要创建谁只认接口 * 类名来自外部输入运行时才确定 *----------------------------------------------------------------------* START-OF-SELECTION. DATA: lv_class_name TYPE string. DATA: lv_data TYPE string. DATA: lo_handler TYPE REF TO zif_handler. 【关键】这个类名是运行时才知道的 真实项目来自配置表 / 接口传入 / 业务场景判断 开发阶段根本不知道会传什么类名 这里是为了程序正常运行手填的假设lv_class_name的字段是WMS调用SAP接口传进来的字段 lv_class_name ZCL_WMS. lv_data 异常数据物料A库存过低. 转大写 TRANSLATE lv_class_name TO UPPER CASE. TRY. 动态创建 这里是为了程序正常运行手填的假设lv_class_name的字段是WMS CREATE OBJECT lo_handler TYPE (lv_class_name). 多态调用 —— 统一入口完全不管实现类是谁 lo_handler-execute( iv_data lv_data ). CATCH cx_root INTO DATA(lx_err). WRITE: / 错误, lx_err-get_text( ). ENDTRY.运行结果WMS 处理 异常数据物料A库存过低五、总结掌握CREATE OBJECT仅仅是探索 ABAP 面向对象编程的一个起点。它在继承、多态、接口和事件驱动编程中都扮演着核心角色。

相关文章:

ABAP-OO:(7)类对象的动态创建和调用

在 ABAP 面向对象开发中,动态创建数据、动态创建对象、动态调用方法是实现灵活架构、低耦合、可配置化的关键技术。它区别于静态编码,核心特点是:类型与行为不在编译期固定,而是在程序运行时动态决定。 一、什么是动态创建&#x…...

Kagantic-Codebase:AI协作代码库治理框架的设计与实践

1. 项目概述:为AI协作而生的代码库治理框架如果你正在尝试将AI助手(比如Claude Code、Cursor、GitHub Copilot)深度集成到你的开发工作流中,并且已经受够了每次都要在聊天框里重复解释项目结构、编码规范和操作边界的麻烦&#xf…...

强化学习在医学视觉语言模型中的应用与优化

1. 项目概述作为一名长期从事医学AI研究的从业者,我见证了强化学习(RL)在医学视觉语言模型领域的崛起。这个交叉领域正在重塑医学影像分析的范式——从传统的单一图像识别,进化到能够理解影像内容并生成专业诊断描述的智能系统。在…...

AI记忆系统演进:从废弃三层架构到实时向量存储实践

1. 项目概述:从废弃的蓝图到现代AI记忆系统的演进如果你正在为你的AI助手寻找一个持久、可搜索的记忆系统,并且偶然发现了openclaw-jarvis-memory这个项目,那么你可能会看到它已经被标记为“废弃”。别急着关掉页面,这恰恰是一个绝…...

智能家居改造第一步:如何安全地为智能开关接入零线?老房无零线解决方案盘点

智能家居改造第一步:如何安全地为智能开关接入零线?老房无零线解决方案盘点 智能家居的普及让传统开关逐渐被智能开关取代,但许多用户在改造过程中遇到一个棘手问题:老房子的开关底盒里可能没有零线。这种情况在2000年以前建造的住…...

利用快马平台与hyperdown快速构建markdown实时预览编辑器原型

最近在做一个需要快速验证想法的项目时,发现用InsCode(快马)平台配合hyperdown解析器来搭建markdown实时预览编辑器特别方便。整个过程从构思到实现只用了不到半小时,完全不需要操心环境配置的问题,特别适合需要快速原型验证的场景。 为什么…...

文明越复杂,伪装就越精致,人性就越容易迷失在符号之中

你说得非常透彻,而且带着一种历史穿透力的清醒。“看最原始的东西就行了”——这其实是一种政治经济学的底层思维:剥开制度、话语、技术、法律的外衣,直视权力与资源分配的本质。一、你说的“原始的东西”是什么?其实就是人类组织…...

AI命令行代理评测框架Terminal-Bench设计与实践

1. 项目背景与核心价值命令行终端是开发者日常工作中不可或缺的效率工具。随着AI技术的快速发展,各类AI代理开始尝试理解并执行自然语言指令来自动化终端操作。但如何量化评估这些AI代理在真实命令行环境中的表现,一直缺乏系统化的评测方案。这正是Termi…...

别再纠结选哪个了!51单片机AD转换方案全对比:XPT2046、PCF8591和内部ADC到底怎么选?

51单片机AD转换方案深度评测:XPT2046、PCF8591与内部ADC实战指南 在嵌入式系统开发中,模拟信号采集是连接物理世界与数字系统的关键桥梁。面对市面上琳琅满目的AD转换方案,工程师们常常陷入选择困境:是使用外置专业芯片还是依赖单…...

Reactor:基于节点化工作流的AI人脸修复与替换引擎深度解析

1. 项目概述:一个被低估的AI图像生成工作流引擎如果你最近在折腾Stable Diffusion,大概率听说过ComfyUI。它以节点式的工作流和强大的自定义能力,成为了许多高阶玩家的首选。但今天我想聊的,是另一个同样基于节点、但在设计理念和…...

选型指南:TJA1021、MC33662等主流LIN收发器怎么选?从单通道到四通道全解析

LIN收发器选型实战指南:从单通道到四通道的工程决策 汽车电子工程师在设计LIN总线节点时,往往会在收发器选型环节陷入纠结。面对NXP、Infineon等厂商的数十种型号,如何根据项目需求精准匹配?我们以实际工程案例为线索,…...

别再让显存拖后腿了:手把手教你用VLLM的PageAttention优化大模型推理

突破大模型推理瓶颈:VLLM与PageAttention实战指南 当你在深夜调试一个即将上线的智能客服系统时,突然发现并发请求量稍大就会触发显存不足的警报——这种场景对AI开发者来说再熟悉不过。大语言模型推理过程中的显存管理问题,就像一道无形的天…...

2026年AI大模型接口中转站全网实测:五大头部服务商谁能脱颖而出,引领行业潮流?

【2026年3月31日 科技产业快讯】2026年,全球AI大模型产业正式从技术创新阶段步入规模化商业落地阶段。AI大模型接口中转站作为连接底层模型能力和上层产业应用的关键基础设施,其市场需求呈现出指数级的增长。国家数据局最新公布的数据显示,截…...

初识AI产品经理:我的学习心得与“夸父追日“感悟(收藏版)

本文以作者成为AI产品经理第一个月的真实学习体验切入,用"夸父追日"比喻AI领域知识更新速度远超学习速度的现实。文章核心聚焦AI产品经理与传统PM的思维差异(管确定性 vs 不确定性)、必备基础能力(需求分析、沟通、PRD写…...

零售业RFID技术实施指南:从合规到高效供应链

1. 零售业RFID合规实施全景解读2003年沃尔玛首次在零售行业推行托盘和箱级RFID标签计划时,这项技术还被视为供应链管理的"未来选项"。如今走过二十年发展历程,RFID技术已从最初的合规要求演变为提升供应链效率的核心工具。作为参与过多个跨国零…...

深入DSP F28335 ADC内核:用示波器实测同步采样与顺序采样的时序差异(附代码与波形图)

深入解析DSP F28335 ADC内核:同步与顺序采样的硬件实测与时序优化 在嵌入式系统开发中,ADC(模数转换器)的性能往往直接决定了整个系统的精度上限。德州仪器(TI)的F28335数字信号处理器搭载的12位ADC模块&am…...

别再空谈概念了!用Python+Three.js从零搭建一个简易的智慧城市数字孪生原型

用PythonThree.js从零构建智慧城市数字孪生原型:十字路口交通模拟实战 当技术博客充斥着数字孪生的概念解析时,真正能让开发者兴奋的永远是动手实现的快感。想象一下,你不仅能理解红绿灯调度算法,还能在三维空间中实时观察车流如何…...

VA-π混合架构:像素级图像生成的策略对齐技术

1. 项目概述:当像素遇上策略对齐 在图像生成领域,我们常常面临一个核心矛盾:如何让生成模型既保持像素级的精细控制,又能理解高层次的语义策略?VA-π(Variational Policy-Aligned Pixelwise Autoregression…...

CSS动画与变换的结合应用

在前端开发中,CSS动画和变换(Transform)是实现视觉效果的两个重要工具。通过合理地结合这两个特性,可以创造出流畅且吸引人的用户界面。本文将通过一个具体实例,探讨如何在CSS中同时使用transform和animation属性来实现一个元素的进入动画和悬停放大效果。 背景介绍 假设…...

别再用tile_images硬拼了!Halcon图像拼接实战:从特征点匹配到消除接缝的全流程避坑指南

Halcon图像拼接实战:从特征匹配到无缝融合的工业级解决方案 在工业视觉检测领域,PCB板的全貌分析常常面临一个现实挑战——如何将多个局部拍摄的高清图像完美拼接成一张完整的大图。传统硬拼接方法简单粗暴,但面对复杂的工业场景往往力不从心…...

开源AI应用后端引擎Aidea-Server:架构解析与部署实践

1. 项目概述:一个开源的AI应用后端引擎如果你正在寻找一个能够将市面上主流的AI大语言模型和文生图模型整合起来,自己部署、自己掌控的后端服务,那么mylxsw/aidea-server这个项目值得你花时间研究一下。简单来说,它是一个用 Go 语…...

低资源语言神经机器翻译:从零到一的实战优化之路

目录 引言:为什么低资源语言翻译如此重要 第一章:理解问题的核心——低资源困境 1.1 数据稀疏性的连锁反应 1.2 我亲历的一个案例 第二章:数据增强——从有限数据中挤出更多价值 2.1 回译:最廉价的双语数据生产流水线 2.2 词级替换:低成本高回报的数据增广 2.3 语…...

提升餐厅运营效率:用快马AI快速生成可管理的动态龙虾菜单

最近在帮朋友的龙虾餐厅优化运营流程,发现菜单更新是个痛点——每次调整价格或推出新菜品,都要找外包开发改代码,既费钱又耗时。于是尝试用InsCode(快马)平台快速搭建了一个动态菜单管理系统,整个过程比想象中简单太多。 1. 需求…...

Dify 2026微调革命:5种工业级轻量化方法实测对比,FP16+LoRA+KV Cache三级压缩方案首次公开

更多请点击: https://intelliparadigm.com 第一章:Dify 2026微调革命的工业级定位与范式跃迁 Dify 2026 不再是轻量级低代码 LLM 应用构建平台,而是以“可验证、可审计、可回滚”的工业级 AI 工程基础设施为内核,重构大模型微调的…...

医疗数据问答系统合规代码避坑清单,20年监管项目经验浓缩为9行核心校验逻辑,错过即失审

更多请点击: https://intelliparadigm.com 第一章:Dify医疗数据问答合规处理代码概览 Dify 作为低代码 AI 应用开发平台,其在医疗领域落地时需严格遵循《个人信息保护法》《人类遗传资源管理条例》及 HIPAA 等多维合规要求。医疗数据问答系…...

告别Docker Desktop:在Fedora 42上用Podman Compose搭建Spring Boot + PostgreSQL开发环境

从Docker到Podman:Fedora 42上构建云原生开发环境的完整指南 在云原生技术快速演进的今天,开发者们正面临着工具链升级的关键时刻。如果你是一位长期使用Docker生态的Java开发者,可能已经感受到了Docker Desktop在资源占用和许可政策上的限制…...

aardio实战:如何用godking库解析图片迷宫并自动寻路(避坑指南)

aardio实战:用godking库解析图片迷宫与自动寻路的深度避坑指南 当你第一次尝试用代码解决迷宫问题时,那种看着程序自动找到出口的成就感是无与伦比的。但在aardio中实现这个功能时,图像处理、坐标转换和算法调用的每个环节都可能藏着意想不到…...

别再只用密码了!手把手教你用Microsoft Authenticator为你的Java Web系统加上双因素认证

企业级Java Web系统集成Microsoft Authenticator双因素认证实战指南 在数字化办公日益普及的今天,仅靠传统密码保护企业系统已远远不够。去年某跨国公司的数据泄露事件调查显示,81%的安全漏洞源于弱密码或密码泄露。作为Java后端开发者,我们亟…...

Allegro 17.4 插件封装实战:从Flash焊盘计算到Place_Bound绘制,一个2.54mm插针的完整制作流程

Allegro 17.4 插件封装实战:从Flash焊盘计算到Place_Bound绘制,一个2.54mm插针的完整制作流程 在PCB设计领域,封装制作是硬件工程师必须掌握的核心技能之一。对于刚接触Allegro的新手来说,插件类封装的制作往往是最基础却也最容易…...

智能旅行规划系统:基于BERT与强化学习的个性化推荐

1. 项目背景与核心价值旅行规划一直是个让人又爱又恨的过程。作为经常出差的"老驴友",我深刻体会到传统旅行App的局限性——它们要么给你推送千篇一律的热门景点,要么需要手动设置大量筛选条件。直到我开始研究智能代理技术,才发现…...