The CAST operator
Important consideration has to be taken when assigning object references
to different target types or classes. A Widening Reference
Conversion occurs when an object reference is converted
to a superclass that can accommodate any possible reference of the
original type or class. A Narrowing Reference Conversion occurs
when an object reference of a superclass is converted to a subtype
or subclass of the original object reference. For example, in
a vehicle class hierarchy with Vehicle
and Car
classes, Car
is a subclass that inherits from
the Vehicle
superclass. When assigning a Car
object
reference to a Vehicle
variable, Widening
Reference Conversion takes place. When assigning a Vehicle
object
reference to a Car
variable, Narrowing Reference
Conversion occurs.
While widening conversion does not require casts and will not produce
compilation or runtime errors, narrowing conversion needs the CAST
operator to
convert to the target type or class:
CAST( object_reference AS type_or_class )
java.lang.StringBuffer
object, and assigns the
reference to a java.lang.Object
variable (implying Widening Reference Conversion);
then the object reference is assigned back to the java.lang.StringBuffer
variable
(implying Narrowing Reference Conversion and CAST
operator
usage):IMPORT JAVA java.lang.Object
IMPORT JAVA java.lang.StringBuffer
MAIN
DEFINE o java.lang.Object
DEFINE sb java.lang.StringBuffer
LET sb = StringBuffer.create()
-- Widening Reference Conversion
LET o = sb
-- Narrowing Reference Conversion needs CAST()
LET sb = CAST( o AS StringBuffer )
END MAIN