Ansicht
Dokumentation
ABAPCASE_TYPE - CASE TYPE
Addresses (Business Address Services) ABAP Short ReferenceDiese Dokumentation steht unter dem Copyright der SAP AG.
CASE TYPE OF
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:
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 vorhandene Objektreferenzvariable ref, deren statischer Typ allgemeiner oder gleich zur in der Anweisung angegebenen Klasse class bzw. Interface intf ist.
- 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 )