[ABAP] Hilfsklasse für Enumeratoren auf Basis von statischen Objektreferenzen

* Klassenobjekte sind nur statisch verfügbar (CLASS-DATA)
* von ihr kann nicht abgeleitet werden (FINAL)
* mit NEW können keine Objektreferenzen erzeugt werden (CREATE PRIVATE)
CLASS lcl_enum_colors DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
* Konstanten vom Typ des Parameters
    CLASS-DATA: co_red TYPE REF TO lcl_enum_colors READ-ONLY.
    CLASS-DATA: co_green TYPE REF TO lcl_enum_colors READ-ONLY.
    CLASS-DATA: co_blue TYPE REF TO lcl_enum_colors READ-ONLY.

* Klassenkonstruktor
    CLASS-METHODS:
      class_constructor.
ENDCLASS.

CLASS lcl_enum_colors IMPLEMENTATION.
* Vorbelegung der Konstanten
* wird immer beim allerersten Aufruf eines Klassenelementes (Funktion, Variable, Konstante ...) ausgeführt
  METHOD class_constructor.
    co_red   = NEW #( ).
    co_green = NEW #( ).
    co_blue  = NEW #( ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Variablen vom Typ REF TO lcl_enum_colors
  DATA: lv_color_green TYPE REF TO lcl_enum_colors.
  DATA: lv_color_red TYPE REF TO lcl_enum_colors.
  DATA: lv_color_blue TYPE REF TO lcl_enum_colors.

* Variablen mit konstanten Werten vorbelegen
  lv_color_green = lcl_enum_colors=>co_green.
  lv_color_red = lcl_enum_colors=>co_red.
  lv_color_blue = lcl_enum_colors=>co_blue.

* Werteausgabe
  IF lv_color_green = lcl_enum_colors=>co_green.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

  IF lv_color_green = lcl_enum_colors=>co_red.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

  IF lcl_enum_colors=>co_red = lcl_enum_colors=>co_blue.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.