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