澳门皇冠官网app枚举对象只好分包类型为枚举类型的枚举值

枚举对象的广阔用处是相比较它和枚举常量以决定程序要求切换成哪三个职能分支:

 除此而外,还或者有部分足以动用的处境:

那令你能够轻易地把现存“枚举值”转换为新办法的枚举值。运气好的话,能够无需调动它们的运用。

作者的回复是:那几个天性实际晚春经在筹算中了,很有期望出现。具体情形要视能源和事先级而定。

枚举对象只好赋值给全体同等枚举类型的枚举对象。一样,枚举对象间的比较也只辛亏同等档案的次序的枚举对象间产生。当然,枚举常量自个儿也带有在内。

 

RTTI中也多了叁个应和的类CL_ABAP_ENUMDESCR

PS:原来的书文的评头品足中有人涉嫌,枚举值和数目字典中的domain的固定值很像,为啥两方未有并轨关系?

TYPES语句的贰个新变式:BEGIN OF ENUMEND OF
ENUM
,它能够围起二个常量的集。常量的科班基本项目是i何况枚举值从0开端计数。

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

那是一种广泛的格局。在ABAP 7.51在此以前,大家日常用如下情势完毕类似的效劳:

大致正是那些剧情了。

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.

枚举是项目和常量的混合体。通过BEGIN OF ENUM enum – END OF ENUM
enum

你证明了二个能够在TYPE附加项后宣称的骨干项目enum。在它们中间,你能够声Bellamy(Bellamy)个常量集,它们叫做枚举常量。那样就定义了具备enum花色的枚举对象所允许的枚举值。在此间,TYPES实在就和CONSTANTS说话同样。

DATA(shirt) = NEW shirt( shirt=>size_xl ).
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 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(shirt) = NEW shirt( 333 ).

要是你在三个上下文中有超过一个枚举类型,你能够将各类枚举值组织到组织里:

这里,size属性只好够是shirt类中定义的常量中的值。别的值会导致非常。客户创建shirt类时,要求这么做:

 

在7.51以及越来越高的本子里,ABAP也会支撑枚举概念。假如使用枚举类型来重写下边的事例的话:

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

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."允许

您能够将枚举对象赋给一个c品种也许string种类的文件。结果正是概念了枚举值的枚举常量的名字。

正文链接:http://www.cnblogs.com/hhelibeb/p/7976078.html

躺下让ABAP运营时来为你办事啊。要留意枚举类型只好在少数切合的运算地点中出现,並且不得不分包预先规定的值。违规的枚举值永久不会在枚举对象中出现。

习认为常,你或多或少也不关注枚举对象的内容。枚举对象的语义由枚举常量来定义。不过,你也足以将枚举类型定义为i类型之外的任何基本类型,并且有所别样枚举值(个中叁个不可能不是早先值):

乌Crane语原稿:ABAP News for Release 7.51 –
Enumerations

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. "语法或运行时错误
TRY.
    DATA(shirt) = NEW shirt( shirt=>size_xl ).
  CATCH cx_wrong_size.
    ...
ENDTRY.
TYPES:
  BEGIN OF ENUM tsize STRUCTURE size,
    s,
    m,
    l,
    xl,
  END OF ENUM tsize STRUCTURE size.

DATA dobj TYPE tsize.
dobj = size-xl. "允许
DATA(text) = CONV string( size_xl ).
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.

另一种方法是,能够运用CONV将三个有效的枚举值调换为枚举对象(常规的赋值语句是力不能够及到位的):

看样子耗费了啊?为啥不让运营时情形来为你做值检查吧?有一种叫做枚举和枚举类型的定义(能够在这种意况下利用)。

枚举对象是枚举类型的多寡对象。枚举对象只好分包类型为枚举类型的枚举值。ABAP从版本7.51最早扶助它们。

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( ).

也足以创作:

澳门皇冠官网app 1

澳门皇冠官网app, 

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

 

ABAP运维时处境会检查唯有被允许的枚举值能够被赋给枚举对象。

 

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.

像上文这样选拔的话:

相关文章