我已经看到了几个ABAP标准方法,它们返回对数据的引用作为结果。CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( )
就是其中一种方法。我的自然倾向是在一行中使用此方法,如下所示:
DATA lv_max_value TYPE i.
lv_max_value = CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( lv_max_value )->*.
可悲的是,这不起作用,因为:
函数方法"GET_MAX_VALUE"的结果类型不是对象 引用或接口引用。
眼前的问题是:是否有可能直接取消引用这些结果?
每当我确定结果兼容时,我宁愿避免旧的取消引用方法(存储引用,将其分配给字段符号,然后将其放入目标变量(:
DATA lv_max_value TYPE i.
DATA ref TYPE REF TO data.
FIELD-SYMBOLS <field> TYPE any.
ref = CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( lv_max_value ).
ASSIGN ref->* TO <field>.
lv_max_value = <field>.
对于一个简单的动作来说,这似乎是一项大规模的操作。
该方法GET_MAX_VALUE
返回一个变量类型化TYPE REF TO DATA
它是"对泛型数据类型的引用"。
不能取消引用泛型引用 (*(。
但是,您可以先CAST
它们,以使 ABAP 知道具体的数据类型,然后取消引用强制转换的(现在类型化(结果。
DATA lv_max_value TYPE i.
lv_max_value = CAST i( cl_abap_exceptional_values=>get_max_value( lv_max_value ) )->*.
(*( TYPES - REF TO 的文档说,只有对完整数据类型的引用才能取消引用:
使用取消引用运算符 ->* 在所有匹配的操作数位置取消引用完整键入
TYPE REF TO complete_type
或LIKE REF TO dobj
的数据引用变量。如果静态数据类型是结构化的,则对象组件选择器允许使用 dref->comp 访问结构的组件。
本文档解释了完整的数据类型是"非泛型的数据类型"。