ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABAP数据类型和数据对象(二)-有效性和可见性,绝对数据类型

2022-04-06 17:03:29  阅读:189  来源: 互联网

标签:name 程序 数据类型 ABAP 类型 全局 TYPE 有效性


有效性和可见性 在ABAP源码中声明性的语句上下文决定了声明部分的可见性和有效性,在ABAP程序中,有三个上下文,数据类型和数据对象是在上下文中被声明的:
  • 过程局部
    • 当过程被执行的时候,过程的局部数据是有效的,当过程被创建的时候它被创建,当过程退出的时候被删除。就他们局部数据和形参来说,过程也能访问到主程序的全局数据,方法也能访问到他们类的组件。
  • 作为类的组件
    • 类的静态属性伴随着ABAP程序内部会话而存在,类的实例属性关联到对象的生命周期,类也能访问到主程序的全局数据。
  • 主程序全局
    • 全局程序数据的存在伴随着ABAP程序的内部会话。当程序在内部会话中被加载的时候数据被创建,当程序移除的时候数据被从内部会话删除。ABAP程序通常只能访问它自己的全局数据。
说明:
  • 所有的上下文可以访问到独立于程序的ABAP数据字典中的类型定义,对于本地声明,隐藏了同名的全部声明。
  • 通过本地类型隐藏的全局类型可以通过指定绝对的类型名字取消,所以动态指定的数据类型,类,或者接口是可能的。
  • 就独立的上下文可见性而言,声明在源文本中的位置也起着重要的作用,只有前面声明的对于后面是可见的,无关上下文。为了允许程序中的顺序匹配上下文可见性,程序所有的全局声明应该在源码开始的时候被指定,在第一个处理块之前,所有本地的声明应该被直接指定。
  • ABAP程序所有的在声明部分声明的数据对于程序来说是全局的,另外所有事件块和对话框模块中声明的数据也是程序的全局的(除了事件块AT SELECTION-SCREEN)。而且在不连续的处理块之间声明的数据对于程序来说也是全局的。
绝对类型名称(ABSOLUTE TYPE NAMES)        相对于它的上下文,ABAP程序语句中类型的名字可以被静态使用,也就是相对类型名字,就像在有效性和可见性部分描述的,局部数据类型隐藏了更多的同名全局数据类型。 对于绝对类型命名,命名的类型是唯一的,一个绝对的类型名字以一个规范路径组成,比如:
  • \TYPE=name
  • \CLASS=name
  • \INTERFACE=name
  • \PROGRAM=name
  • \CLASS-POOL=name
  • \FUNCTION-POOL=name
  • \TYPE-POOL=name
  • \METHOD=name
  • \FORM=name
  • \FUNCTION=name
说明:
  • 为了给本地数据类型,类,接口创建绝对类型命名,使用它们上下文作为前缀,进行组件命名。
  • 使用一个绝对类型命名的规范使得从本地类型隐藏全局类型变成可能,如果有访问的必要加载不同的程序到当前内部会话也是可能的。
  • 运行时类型服务(RTTS)的类类型,比如CL_ABAP_TYPEDESCR,包含了返回绝数据类型或者数据对象的类型名字。
例如:当类c1方法m1和m2被调用,RTTS获取到绝对类型名字\TYPE=SPFLI或者\PROGRAM=RTTI_TEST\CLASS=C1\METHOD=M2\TYPE=SPFLI给泛化类型参数p,在方法m1,m2中spfli的使用含有不同的含义。 代码如下:
CLASS c1 DEFINITION.
  PUBLIC SECTION.
    METHODS: m1,
             m2,
             m3 IMPORTING p TYPE any.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
  METHOD m1.
    DATA struc TYPE spfli.
    m3( struc ).
  ENDMETHOD.
  METHOD m2.
    TYPES spfli TYPE spfli.
    DATA struc TYPE spfli.
    m3( struc ).
  ENDMETHOD.
  METHOD m3.
    DATA type_descr TYPE REF TO cl_abap_typedescr.
    type_descr = cl_abap_typedescr=>describe_by_data( p ).
    WRITE / type_descr->absolute_name.
  ENDMETHOD.
ENDCLASS.
 
START-OF-SELECTION.

data c1_ref type REF TO c1.
CREATE OBJECT c1_ref .
c1_ref->m1( ).
c1_ref->m2( ).

运行结果:

\TYPE=SPFLI \PROGRAM=ZWSPTEST10\CLASS=C1\METHOD=M2\TYPE=SPFLI

标签:name,程序,数据类型,ABAP,类型,全局,TYPE,有效性
来源: https://www.cnblogs.com/mach-arch/p/16107345.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有