Ansicht
Dokumentation

ABAPCASE_TYPE - CASE TYPE

ABAPCASE_TYPE - CASE TYPE

Addresses (Business Address Services)   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

CASE TYPE OF

Kurzreferenz



CASE TYPE OF oref.
  $[WHEN TYPE class$|intf $[INTO target1$].
    $[statement_block1$]$]
  $[WHEN TYPE class$|intf $[INTO target2$].
    $[statement_block2$]$]
  ...
  $[WHEN OTHERS.
    $[statement_blockn$]$]
ENDCASE.

Zusatz:

... INTO target

Wirkung

Spezielle Fallunterscheidung für Objektreferenzvariablen. Diese Form einer mit CASE eingeleiteten Kontrollstruktur überprüft den dynamischen Typ einer nicht initialen und den statischen Typ einer initialen Objektreferenzvariable oref. Für oref muss eine Objektreferenzvariable vom statischen Typ einer Klasse oder eines Interface angegeben werden. Bei oref handelt es sich um eine allgemeine Ausdrucksposition.

Hinter WHEN TYPE ist eine an dieser Stelle verwendbare Klasse class oder ein Interface intf anzugeben. Es wird der erste Anweisungsblock statement_block ausgeführt, für den die Klasse class bzw. das Interface intf allgemeiner oder gleich dem

  • dynamischen Typ einer nicht initialen Objektreferenzvariablen oref ist
  • statischen Typ einer initialen Objektreferenzvariablen oref ist

Wenn dies für keine Klasse class bzw. Interface intf zutrifft, wird der Anweisungsblock hinter WHEN OTHERS ausgeführt. Es kann kein Objekttyp class bzw. intf angegeben werden, für den bereits statisch erkennbar ist, dass er die Bedingung nicht erfüllen kann.

Hinweise

  • Eine Fallunterscheidung mit CASE TYPE OF ist eine andere Schreibweise folgender Verzweigung mit IF und dem Prädikatausdruck IS INSTANCE OF und es gelten die entsprechenden Regeln und Hinweise:
IF oref IS INSTANCE OF class$|intf.
  $[statement_block1$]
ELSEIF oref IS INSTANCE OF class$|intf.
  $[statement_block2$]
...
ELSE.
  $[statement_blockn$]
ENDIF.
  • In der Kontrollstruktur müssen speziellere Klassen class bzw. bzw. Interfaces intf vor allgemeineren aufgeführt werden, damit der zugehörige Anweisungsblock ausgeführt wird.

Beispiel

Fallunterscheidung für den dynamischen Typ einer Objektreferenzvariable oref. Es wird von speziellen zu allgemeinen Klassen hin unterschieden. Im gezeigten Fall ist c2 die erste Klasse, welche die Bedingung erfüllt. oref kann an ref2 vom statischen Typ c2 zugewiesen werden, ohne dass eine Ausnahme auftreten kann.

Fallunterscheidung CASE TYPE OF für Ausnahmen

Zusatz

... INTO target

Wirkung

Hinter dem optionalen Zusatz INTO kann zu jeder Anweisung WHEN TYPE einer mit CASE TYPE OF eingeleiteten Fallunterscheidung wie folgt eine Zielvariable target angegeben werden:

  • Eine Inline-Deklaration DATA(ref) oder FINAL(ref). In diesem Fall wird eine Objektreferenzvariable vom statischen Typ der Klasse class bzw. des Interface intf deklariert.

Wenn der Zusatz INTO bei der ersten WHEN-Anweisung aufgeführt ist, welche die Bedingung erfüllt, wird vor Ausführung des Anweisungsblocks die Referenz in oref an ref zugewiesen, wobei sowohl Upcasts als auch Downcasts stattfinden können.

Hinweis

Mit der Anweisung

WHEN TYPE class$|intf INTO ref.

ist eine gleichbedeutende Kurzform für

WHEN TYPE class$|intf.
  ref = oref.

Mit der Anweisung

WHEN TYPE class$|intf INTO DATA(ref).

ist eine gleichbedeutende Kurzform für

WHEN TYPE class$|intf.
  DATA(ref) = CAST class$|intf( oref ).


Beispiel

Die folgende Fallunterscheidung zeigt die Kurzform der Fallunterscheidung des vorhergehenden Beispiels.

Fallunterscheidung CASE TYPE OF für RTTI






CPI1466 during Backup   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6708 Date: 20240420 Time: 011245     sap01-206 ( 67 ms )