永利棋牌官方下载-www.55402.com-永利国际唯一指定官网

永利棋牌官方下载提供最新最好玩的真人游戏,www.55402.com是澳门国际娱乐平台官方网站唯一授权会员登录手机版,www.316net,www.366net,516.net,626.net,766.net,www.565.net,www.16.net,bwin62.com,bwin180.com,永利国际唯一指定官网为新老顾客提供更多的精彩娱乐项目,,所有的玩家都可以得到注册送体验金的巨大福利是设身处地为玩家量身订造的经典网站。

ABAP中的枚举对象

 

枚举对象是枚举类型的多少对象。枚举对象只可以分包类型为枚举类型的枚举值。ABAP从版本7.51从头协理它们。

那是大器晚成种广泛的格局。在ABAP 7.51此前,大家平时用如下方式实现类似的效果与利益:

CLASS cx_wrong_size DEFINITION INHERITING FROM cx_static_check.
 ENDCLASS.

 CLASS shirt DEFINITION.
   PUBLIC SECTION.
     TYPES tsize TYPE i.
     CONSTANTS:
       size_s  TYPE tsize VALUE 0,
       size_m  TYPE tsize VALUE 1,
       size_l  TYPE tsize VALUE 2,
       size_xl TYPE tsize VALUE 3.
     METHODS
       constructor IMPORTING size TYPE tsize
                   RAISING   cx_wrong_size.
     ...
   PRIVATE SECTION.
     DATA
       size TYPE tsize.
 ENDCLASS.

 CLASS shirt IMPLEMENTATION.
   METHOD constructor.
     IF size <> size_s AND
        size <> size_m AND
        size <> size_l AND
        size <> size_xl.
       RAISE EXCEPTION TYPE cx_wrong_size.
     ENDIF.
     me->size = COND #(
       WHEN size <> size_s AND
                    size <> size_m AND
                    size <> size_l AND
                    size <> size_xl THEN THROW cx_wrong_size( )
       ELSE size ).
   ENDMETHOD.
 ENDCLASS.

此处,size属性只好够是shirt类中定义的常量中的值。其余值会导致分外。顾客创造shirt类时,必要如此做:

TRY.
    DATA(shirt) = NEW shirt( shirt=>size_xl ).
  CATCH cx_wrong_size.
    ...
ENDTRY.

观看开支了吧?为啥不让运转时情况来为您做值检查呢?有龙精虎猛种名称为枚举和枚举类型ABAP中的枚举对象。的定义(能够在这里种场馆下利用)。

在7.51以致越来越高的版本里,ABAP也会支撑枚举概念。若是选取枚举类型来重写上边的事例的话:

CLASS shirt DEFINITION.
  PUBLIC SECTION.
    TYPES:
      BEGIN OF ENUM tsize,
        size_s,
        size_m,
        size_l,
        size_xl,
      END OF ENUM tsize.
    METHODS
      constructor IMPORTING size TYPE tsize.
    ...
  PRIVATE SECTION.
    DATA
      size TYPE tsize.
ENDCLASS.

CLASS shirt IMPLEMENTATION.
  METHOD constructor.
    me->size = size.
  ENDMETHOD.
ENDCLASS.

TYPES语句的一个新变式:BEGIN OF ENUMEND OF ENUM,它能够围起二个常量的集。常量的正儿八经基本类型是i相同的时候枚举值从0开始计数。

ABAP中的枚举对象。像上文这样选择的话:

DATA(shirt) = NEW shirt( shirt=>size_xl ).

而是,使用了枚举对象后,你不再须求管理非常了。如若您传递一个违法值的话,会得到语法错误!

DATA(shirt) = NEW shirt( 333 ).

图片 1

 

枚举是项目和常量的混合体。通过BEGIN OF ENUM enumABAP中的枚举对象。 – END OF ENUM enum 你注解了贰个可以在TYPE附加项后宣称的着力项目enum。在它们之间,你能够声美素佳儿个常量集,它们叫做枚举常量。那样就定义了富有enum花色的枚举对象所允许的枚举值。在那地,TYPES实在就和CONSTANTS言语同样。

ABAP运营时遭受会检讨唯有被允许的枚举值能够被赋给枚举对象。

TYPES:
  BEGIN OF ENUM tsize,
    size_s,
    size_m,
    size_l,
    size_xl,
  END OF ENUM tsize.

DATA size TYPE tsize.
size = size_xl. "允许

DATA dobj LIKE size.
dobj = size. "允许

dobj = 333. "语法或运行时错误

枚举对象只可以赋值给持有同等枚举类型的枚举对象。同样,枚举对象间的比较也只好在同样档次的枚举对象间发生。当然,枚举常量本人也含有在内。

经常,你或多或少也不关心枚举对象的开始和结果。枚举对象的语义由枚举常量来定义。不过,你也能够将枚举类型定义为i类型之外的别的基本类型,并且存有别样枚举值(此中贰个必须是初阶值):

TYPES:
  basetype TYPE c LENGTH 2,
  BEGIN OF ENUM tsize BASE TYPE basetype,
    size_i  VALUE IS INITIAL,
    size_s  VALUE `S`,
    size_m  VALUE `M`,
    size_l  VALUE `L`,
    size_xl VALUE `XL`,
  END OF ENUM tsize.

DATA size TYPE tsize.
size = size_xl. "允许

DATA dobj LIKE size.
dobj = size."允许

那让你能够轻便地把现成“枚举值”调换为新点子的枚举值。运气好的话,能够没有须求调动它们的行使。

若是您在二个上下文中有超过一个枚举类型,你能够将次第枚举值组织到协会里:

TYPES:
  BEGIN OF ENUM tsize STRUCTURE size,
    s,
    m,
    l,
    xl,
  END OF ENUM tsize STRUCTURE size.

DATA dobj TYPE tsize.
dobj = size-xl. "允许

上述代码定义了二个枚举结构size。结构的机件是枚举类型的枚举常量。

 

枚举对象的大面积用处是比较它和枚举常量以决定程序须要切换成哪三个功能分支:

TYPES:
  BEGIN OF ENUM tsize STRUCTURE size,
    s,
    m,
    l,
    xl,
  END OF ENUM tsize STRUCTURE size.

DATA dobj TYPE tsize.

...

CASE dobj.
  WHEN size-s.
    ...
  WHEN size-m.
    ...
  WHEN size-l.
    ...
  WHEN size-xl.
    ...
ENDCASE.

 除此而外,还应该有部分能够使用的景况:

您能够将枚举对象赋给五个c花色只怕string品类的公文。结果正是概念了枚举值的枚举常量的名字。

TYPES:
  BEGIN OF ENUM tsize,
    size_s,
    size_m,
    size_l,
    size_xl,
  END OF ENUM tsize.

DATA text TYPE string.
text = size_xl.
cl_demo_output=>display( text ). "结果是SIZE_XL

也得以创作:

DATA(text) = CONV string( size_xl ).

能够运用CONV操作符钦赐项目来访谈当前值:

TYPES:
  BEGIN OF ENUM tsize,
    size_s,
    size_m,
    size_l,
    size_xl,
  END OF ENUM tsize.

DATA(value) = CONV i( size_xl ) .
cl_demo_output=>display( value ). "输出结果是3

另意气风发种方法是,能够使用CONV将贰个管用的枚举值转变为枚举对象(常规的赋值语句是不可能达成的):

TYPES:
  BEGIN OF ENUM tsize,
    size_s,
    size_m,
    size_l,
    size_xl,
  END OF ENUM tsize.

DATA(num) = 3.

TRY.
    DATA(dobj) = CONV tsize( num ) .
    cl_demo_output=>display( dobj ). "Output is SIZE_XL
  CATCH cx_sy_conversion_no_enum_value.
    ...
ENDTRY.

RTTI中也多了三个遥相呼应的类CL_ABAP_ENUMDESCR

TYPES:
  BEGIN OF ENUM tsize,
    size_s,
    size_m,
    size_l,
    size_xl,
  END OF ENUM tsize.

DATA(size) = VALUE tsize( ).

DATA(enum_descr) = CAST cl_abap_enumdescr(
  cl_abap_typedescr=>describe_by_data( size ) ).

cl_demo_output=>new(
  )->write_data( enum_descr->kind            "E, for elementary
  )->write_data( enum_descr->type_kind       "k, new for enumerated type
  )->write_data( enum_descr->base_type_kind  "I, the base type
  )->write_data( enum_descr->members         "Table of constants and values
  )->display( ).

大略就是那个剧情了。

躺下让ABAP运维时来为您办事吧。要注意枚举类型只好在好几切合的演算地方中冒出,并且不得不分包预先规定的值。违规的枚举值恒久不会在枚举对象中冒出。

 

PS:原来的小说的商议中有人涉嫌,枚举值和数码字典中的domain的固定值很像,为何双方没有并轨关系?

作者的答应是:那几个性情实际晚春经在设计中了,很有愿意出现。具体意况要视财富和预先级而定。

 

正文链接:

斯洛伐克语原来的文章:ABAP News for Release 7.51 – Enumerations

 

本文由永利棋牌官方下载发布于永利国际唯一指定官网,转载请注明出处:ABAP中的枚举对象

您可能还会对下面的文章感兴趣: