Instanz Klasse erzeugen mit NEW im neuen ABAP
Siehe Neues ABAP (ab Release 7.40).
Siehe Kategorie:Neues ABAP.
Ab ABAP-Release 7.40 SP2 gibt es die Möglichkeit eine Instanz einer Klasse anzulegen mit NEW <klassenname>.
Klassische Anlage Instanz einer Klasse mit CREATE OBJECT
Data: lo_class type ref to lcl_classe. Create object lo_class.
Anlage Instanz einer Klasse mit NEW
Die Instanz der Klasse wird angelegt mit Verweis auf die (lokale) Klasse "LCL_CLASSE". Gegebenfalls würden die Parameter für die CONSTRUCTOR-Methode übergeben.
DATA(lo_class) = NEW lcl_classe( ).
Wenn die Referenzvariable bereits angelegt wurde, wird die Klassenreferenz durch "#" ersetzt.
Data: lo_class type ref to lcl_class. DATA(lo_class) = NEW #( ).
Beispiel mit Klasse Z_CL_TEST_EBERSTEIN
In der Klasse Z_CL_TEST_EBERSTEIN werden die 2 Methoden CLASS_CONSTRUCTOR und CONSTRUCTOR angelegt.
Definition Methoden
Implementierung Methoden
Die statische Methode CLASS_CONSTRUCTOR gibt eine Message aus.
Die Instanzmethode CONSTRUCTOR gibt ebenfalls eine Message aus.
Instanzierung Objekt im Report
Führt man nun in einem Report die folgende Zeile aus, wird eine Instanz auf die Klasse Z_CL_TEST_EBERSTEIN erzeugt.
DATA(lo_test) = NEW Z_CL_TEST_EBERSTEIN( ).
Ausführung
die Methoden CLASS_CONSTRUCTOR und CONSTRUCTOR werden in dieser Reihenfolge ausgeführt.
Instanzkonstruktor mit Importparameter
Der Instanzkonstruktur CONSTRUCTOR bekommt nun einen Importparameter IV_NAME.
Da nur Importparameter erlaubt sind, muss dies nicht auch nicht noch extra mit einer Parameterart "Importing, "Exprting" etc. angegeben werden, bzw. diese Angabe ist auch nicht möglich. Man sollte trotzdem das Präfix "IV", "IS" oder "IT" vor dem Parameter schreiben.
Die Instanzmethode CONSTRUCTOR wird nun in der Implementierung um den Parameter IV_NAME erweitert.
Die Instanziierung der Klasse wird um die Übergabe vom Wert "Hugo" erweitert.
DATA(lo_klasse) = NEW Z_CL_TEST_EBERSTEIN( 'Hugo' ).
Wenn es nur einen Importparameter gibt, kann man den Namen des Parameters auch weglassen. Man kann den Parameternamen auch dazuschreiben. Bei mehreren Parametern muss man es auch.
DATA(lo_klasse) = NEW Z_CL_TEST_EBERSTEIN( IV_NAME = 'Hugo' ).
Entsprechend verändert sich die Ausgabe vom Messagefenster der Instanzmethode