ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Programmablaufsteuerung →  Ausdrücke und Funktionen für Bedingungen →  log_exp - Logische Ausdrücke →  rel_exp - Prädikate →  rel_exp - Prädikatausdrücke → 

rel_exp - IS INSTANCE OF

Syntax

... oref IS [NOT] INSTANCE OF class|intf

Wirkung

Der Prädikatausdruck IS INSTANCE OF überprüft, ob

spezieller oder gleich einem Vergleichstyp ist. Der Vergleichstyp muss ein Objekttyp, also eine über class angegebene Klasse oder ein über intf angegebenes Interface sein, das an dieser Stelle verwendbar ist. 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.

Der Ausdruck ist in folgenden Fällen wahr, bzw. bei der Angabe von NOT falsch:

Wenn für oref ein Feldsymbol oder ein Formalparameter angegeben ist, kann dessen Typ auch vollständig generisch, d.h. mit any typisiert sein und es muss sich zur Laufzeit um eine Objektreferenzvariable handeln. Wenn für oref ein generisch typisiertes Feldsymbol oder ein generisch typisierter Formalparameter angegeben ist, wird der statische Typ der Objektreferenzvariablen verwendet, den das Feldsymbol bzw. der Formalparameter zur Laufzeit repräsentiert.

Es kommt zu einem Syntaxfehler, wenn bereits statisch erkennbar ist, dass das Ergebnis des Ausdrucks falsch ist.

Hinweise

Beispiel

Alle folgenden Prädikatausdrücke sind wahr, da der dynamische Typ der Objektreferenzvariable oref spezieller oder gleich dem angegebenen Objekttyp ist. Siehe auch Prädikatausdruck IS INSTANCE OF für ein ausführliches Beispiel.

INTERFACE intf.
ENDINTERFACE.

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    INTERFACES intf.
ENDCLASS.

CLASS c2 DEFINITION INHERITING FROM c1.
ENDCLASS.

DATA oref TYPE REF TO object.

oref = NEW c1( ).
ASSERT oref IS INSTANCE OF c1.
ASSERT oref IS INSTANCE OF intf.

oref = NEW c2( ).
ASSERT oref IS INSTANCE OF c2.
ASSERT oref IS INSTANCE OF c1.
ASSERT oref IS INSTANCE OF intf.

Beispiel

Das folgende Beispiel zeigt, wie über den Prädikatausdruck IS INSTANCE OF die Möglichkeit eines Down Cast überprüft werden kann. Die ebenfalls gezeigte Ausnahmebehandlung wird dadurch unnötig.

CLASS c1 DEFINITION.
ENDCLASS.

CLASS c2 DEFINITION INHERITING FROM c1.
ENDCLASS.

DATA: ref1 TYPE REF TO c1,
      ref2 TYPE REF TO c2.

ref1 = NEW c2( ).

IF ref1 IS INSTANCE OF c2.
  ref2 ?= ref1.
ENDIF.

TRY.
    ref2 ?= ref1.
  CATCH cx_sy_move_cast_error.
ENDTRY.



Weiterlesen
Prädikatausdruck IS INSTANCE OF