Skip to content

ABAP Keyword Documentation →  ABAP − Reference →  Declarations →  Declaration Statements →  Data Types and Data Objects →  Declaring Data Objects →  DATA 

DATA - REF TO

Quick Reference

Other versions: 7.31 | 7.40 | 7.54

Syntax


DATA ref { {TYPE REF TO type} 
         | {LIKE REF TO dobj} }
         [VALUE IS INITIAL]
         [READ-ONLY].

Effect

Using the REF TO addition, you declare a reference variable ref. The static type of the reference variable is specified after REF TO. The static type limits the set of objects to which ref can point. The dynamic type of a reference variable is the data type or the class to which it currently points. The static type is always more general or the same as the dynamic type (see also the conversion rule for reference variables).

The syntax and meaning of the additions TYPE and LIKE are the same as the definition of reference types in the section TYPES - REF TO, but here they are used to create a bound reference type.

Only IS INITIAL can be specified as a start value after the addition VALUE.


Notes

  • Reference variables are opaque, which means their content cannot be accessed directly. A reference consists of the address of an object and other administration information.
  • A reference in a reference variable is valid if it points to an object. In this case the predicate expression IS BOUND is true. A non-initial reference can be invalid it it points to deleted objects. A heap reference that points to a row in an internal table can become invalid if the row is deleted. A stack reference can become invalid if the referenced data object is removed from the stack.

Example

In this example, an object reference oref and two data references dref1 and dref2 are declared. Both data references are typed fully and can be dereferenced using the dereferencing operator ->* in operand positions.

CLASS c1 DEFINITION. 
  PUBLIC SECTION. 
    DATA a1 TYPE i VALUE 1. 
ENDCLASS. 

DATA: oref  TYPE REF TO c1, 
      dref1 LIKE REF TO oref, 
      dref2 TYPE REF TO i. 

CREATE OBJECT oref. 
dref1 = REF #( oref ). 

CREATE DATA dref2. 
dref2->* = dref1->*->a1.