ARTICLE
NEW - Classes
Syntax
... NEW class|#( p1 = a1 p2 = a2 .. ) ...
Effect
If a class class is specified or # stands for a class like
this, the non-optional input parameters p1 p2 ... of the instance
constructor of the instantiated class must be filled using the
type-compliant actual parameters a1 a2 ... . The optional input
parameters do not need to be filled. The description of the statement
CREATE OBJECT specifies how
values are passed by parameter and which classes can be used.
No parameters are passed for
a class without an explicit instance constructor
Like an object reference variable of the type class , a
constructor expression NEW class( ... ) can be specified before
the object component selector
- and in chained
attribute accesses and chained
method calls . A chained method call of this type can be specified as
a standalone statement . This
persists the result for the duration of the statement. Even a single
expression without a following object component selector can be
specified as a standalone statement. In this case, the only constructor
executed is the constructor that needs to save a reference to the new
object elsewhere (if it needs to be persisted).
The following applies in particular to an attribute access
NEW
class( ... )- attr :
it can be specified as a writable
expression in a result position .
A specified offset/length
+off(len) can be appended (if the data
type is suitable), except if the chaining uses the statement ASSIGN
as a memory area .
Method chainings cannot be specified
between the constructor expression and the attribute here.
Notes
This can be seen as a functional call of the instance constructor. As
with function calls of
functional methods , no
non-class-based exceptions can be
handled.
When the instance constructor is called, the return code sy-subrc
is set to 0. Values other than 0 are not possible, since
non-class-based exceptions cannot be handled.
Example
Constructs an instance of the class c1 when the method m2
of the class c2 . Here, an input parameter of the type in question
is expected.
CLASS c1 DEFINITION.
PUBLIC SECTION.
METHODS constructor IMPORTING p1 TYPE i p2 TYPE i.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
METHOD constructor.
...
ENDMETHOD.
ENDCLASS.
CLASS c2 DEFINITION.
PUBLIC SECTION.
CLASS-METHODS m2 IMPORTING oref TYPE REF TO c1.
ENDCLASS.
CLASS c2 IMPLEMENTATION.
METHOD m2.
...
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
c2=>m2( NEW #( p1 = 1 p2 = 2 ) ).
Example
Uses a constructor expression with NEW in various positions. The
temporary reference variable created using NEW is persisted
during each statement.
CLASS c1 DEFINITION.
PUBLIC SECTION.
DATA a1 TYPE i.
METHODS: m1 RETURNING value(p) TYPE i,
m2.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
METHOD m1.
...
ENDMETHOD.
METHOD m2.
...
ENDMETHOD.
ENDCLASS.
DATA num TYPE i.
START-OF-SELECTION.
num = NEW c1( )->a1.
NEW c1( )->a1 = num.
num = NEW c1( )->m1( ).
NEW c1( )->m2( ).
NEW c1( ).
Example
Displays a time stamp created in a constructor that only exists while
the statement is being executed.
CLASS utc DEFINITION.
PUBLIC SECTION.
DATA ts TYPE timestamp.
METHODS constructor.
ENDCLASS.
CLASS utc IMPLEMENTATION.
METHOD constructor.
GET TIME STAMP FIELD ts.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
cl_demo_output=>display_text(
|{ NEW utc( )->ts TIMESTAMP = ISO }| ).
Example
Constructor expression with NEW on the left side of an
expression. The temporary reference variable created using NEW
exists only while the statement is being executed, however the reference
to the object is assigned to the reference variable oref of the
class class . This persists the object.
CLASS class DEFINITION.
PUBLIC SECTION.
DATA attr TYPE string.
METHODS constructor.
ENDCLASS.
DATA oref TYPE REF TO class.
CLASS class IMPLEMENTATION.
METHOD constructor.
oref = me.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
NEW class( )->attr = 'foo'.
cl_demo_output=>display( oref->attr ).
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved