如何循环调用含any类型参数的ABAP泛型方法?
解决方案:使用数据引用实现循环调用
ABAP不允许将泛型类型any作为结构体的字段类型,但可以通过**数据引用(TYPE REF TO data)**来存储任意类型的参数值,从而实现循环调用目标方法。以下是具体实现步骤:
1. 定义支持任意类型值的键值对结构
将结构体中的value字段改为数据引用类型,替代原来的any:
TYPES: BEGIN OF param_name_value_pair, name TYPE char30, " 与方法的param_name类型保持一致 value TYPE REF TO data, " 用数据引用存储任意类型的值 END OF param_name_value_pair. TYPES: param_key_value_pairs TYPE STANDARD TABLE OF param_name_value_pair WITH DEFAULT KEY.
2. 初始化参数列表并循环调用方法
通过NEW #()或GET REFERENCE OF创建数据引用,然后循环遍历调用目标方法:
DATA(parameters) = VALUE some_table_type( ). " 方式1:用NEW操作符直接创建数据引用并赋值 DATA(param_list) = VALUE param_key_value_pairs( ( name = z_if_constants=>parameters-p_id value = NEW #( p_id ) ) ( name = z_if_constants=>parameters-p_name value = NEW #( p_name ) ) " 继续添加其他参数... ). " 方式2:通过GET REFERENCE OF获取已有变量的引用(适合复杂变量场景) " DATA(ref_p_id) = GET REFERENCE OF p_id. " DATA(ref_p_name) = GET REFERENCE OF p_name. " DATA(param_list) = VALUE param_key_value_pairs( " ( name = z_if_constants=>parameters-p_id value = ref_p_id ) " ( name = z_if_constants=>parameters-p_name value = ref_p_name ) " ). LOOP AT param_list INTO DATA(param_pair). z_my_class=>generic_method( EXPORTING param_value = param_pair->* " 解引用数据引用,传递实际值 param_name = param_pair-name CHANGING parameters = parameters ). ENDLOOP.
关键说明
- 数据引用
TYPE REF TO data可以指向任意ABAP数据类型,完美适配方法的any类型参数 - 循环时通过
->*解引用操作符,将数据引用指向的实际值传递给方法 - 两种初始化方式可根据参数类型灵活选择,
NEW #()语法更简洁,GET REFERENCE OF适合已有变量的场景
内容的提问来源于stack exchange,提问作者Cold_Class
相关产品推荐
相关产品推荐

