<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Type Casting - Clarification in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/type-casting-clarification/m-p/9147901#M1710070</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Experts,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am aware of type casting and how it works but need some clarification&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have sub class reference and super class reference declared&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #008000;"&gt;Super class reference = Sub class reference&amp;nbsp;&amp;nbsp; (CORRECT) - no syntax error and no exception&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #008000;"&gt;Sub class reference = Super class reference&amp;nbsp;&amp;nbsp; (INCORRECT) - gives syntax error&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;Sub class reference ?= Super class reference&amp;nbsp;&amp;nbsp; (CORRECT)&amp;nbsp; - syntactically correct but gives an exception and has to be explicitly caught using try-endtry and catch cx_sy_move_cast_error&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;If it gives an exception, what is point in using this statement at all? &lt;/STRONG&gt; The reference will never be assigned and cannot be used.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please clarify.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Vasu&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 06 Nov 2012 19:06:37 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2012-11-06T19:06:37Z</dc:date>
    <item>
      <title>Type Casting - Clarification</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/type-casting-clarification/m-p/9147901#M1710070</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Experts,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am aware of type casting and how it works but need some clarification&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have sub class reference and super class reference declared&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #008000;"&gt;Super class reference = Sub class reference&amp;nbsp;&amp;nbsp; (CORRECT) - no syntax error and no exception&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #008000;"&gt;Sub class reference = Super class reference&amp;nbsp;&amp;nbsp; (INCORRECT) - gives syntax error&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;Sub class reference ?= Super class reference&amp;nbsp;&amp;nbsp; (CORRECT)&amp;nbsp; - syntactically correct but gives an exception and has to be explicitly caught using try-endtry and catch cx_sy_move_cast_error&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;If it gives an exception, what is point in using this statement at all? &lt;/STRONG&gt; The reference will never be assigned and cannot be used.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please clarify.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Vasu&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Nov 2012 19:06:37 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/type-casting-clarification/m-p/9147901#M1710070</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2012-11-06T19:06:37Z</dc:date>
    </item>
    <item>
      <title>Re: Type Casting - Clarification</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/type-casting-clarification/m-p/9147902#M1710071</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Vasu,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To understand the concept of "casting" you have to be clear with the concept &lt;A href="http://help.sap.com/abapdocu_731/en/abenstatic_type_glosry.htm"&gt;static&lt;/A&gt; &amp;amp; &lt;A href="http://help.sap.com/abapdocu_731/en/abendynamic_type_glosry.htm"&gt;dynamic&lt;/A&gt; types for reference variables. In addition to this remember the golden rule of casting:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&lt;P&gt;&lt;SPAN style="color: #ff6600;"&gt;&lt;SPAN style="font-family: Arial; background-color: #f2f4f7;"&gt;The dynamic type of a reference variable is always more specific than or the same as the &lt;/SPAN&gt;static type&lt;/SPAN&gt;&lt;/P&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Let us analyse your first 2 statements:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;SPAN style="color: #008000; font-size: 12px; background-color: #ffffff;"&gt;Super class reference = Sub class reference &lt;SPAN style="color: #000000;"&gt;--&amp;gt; Golden rule is satisfied. Compiler is happy &amp;amp; no error message &lt;SPAN __jive_emoticon_name="happy" __jive_macro_name="emoticon" class="jive_macro jive_emote" src="https://community.sap.com/1050/images/emoticons/happy.gif"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #000000; font-size: 12px; background-color: #ffffff;"&gt;&lt;SPAN style="color: #008000; font-size: 12px; background-color: #ffffff;"&gt;Sub class reference = Super class reference&lt;/SPAN&gt; --&amp;gt; Golden rule is violated. Compiler complains &amp;amp; throws a syntax error &lt;SPAN __jive_emoticon_name="angry" __jive_macro_name="emoticon" class="jive_macro jive_emote" src="https://community.sap.com/1050/images/emoticons/angry.gif"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now lets see whats's wrong with the 3rd statement&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&lt;SPAN style="background-color: #ffffff; color: #ff0000; font-size: 12px;"&gt;Sub class reference ?= Super class reference&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN __jive_emoticon_name="info" __jive_macro_name="emoticon" class="jive_macro jive_emote" src="https://community.sap.com/1050/images/emoticons/info.gif"&gt;&lt;/SPAN&gt; The casting operator (?=) is only an instruction to the compiler to ignore the "golden rule" during static compilation check (in simpler terms the check you do during code generation). &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But during runtime the "golden rule" will be checked and if it fails an exception of type &lt;SPAN style="color: #606060; font-family: Arial; background-color: #f2f4f7;"&gt;CX_SY_MOVE_CAST_ERROR&lt;/SPAN&gt; is raised.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A simple example to understand the concept:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&lt;P&gt;&lt;SPAN class="L0S52"&gt;PARAMETERS&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;: &lt;/SPAN&gt;rb_good &lt;SPAN class="L0S52"&gt;RADIOBUTTON &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;GROUP &lt;/SPAN&gt;g1&lt;SPAN class="L0S55"&gt;,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rb_bad&amp;nbsp; &lt;SPAN class="L0S52"&gt;RADIOBUTTON &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;GROUP &lt;/SPAN&gt;g1&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN class="L0S52"&gt;CLASS &lt;/SPAN&gt;lcl_animal &lt;SPAN class="L0S52"&gt;DEFINITION&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN class="L0S52"&gt;ENDCLASS&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="L0S31"&gt;"lcl_animal DEFINITION&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN class="L0S52"&gt;CLASS &lt;/SPAN&gt;lcl_dog &lt;SPAN class="L0S52"&gt;DEFINITION &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;INHERITING &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;FROM &lt;/SPAN&gt;lcl_animal&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN class="L0S52"&gt;ENDCLASS&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="L0S31"&gt;"lcl_dog DEFINITION&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN class="L0S52"&gt;DATA&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;: &lt;/SPAN&gt;go_animal&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;TYPE &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;REF &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;TO &lt;/SPAN&gt;lcl_animal&lt;SPAN class="L0S55"&gt;,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; go_dog&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;TYPE &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;REF &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;TO &lt;/SPAN&gt;lcl_dog&lt;SPAN class="L0S55"&gt;,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gx_cast_err &lt;SPAN class="L0S52"&gt;TYPE &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;REF &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;TO &lt;/SPAN&gt;cx_sy_move_cast_error&lt;SPAN class="L0S55"&gt;,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gv_msg&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;TYPE &lt;/SPAN&gt;string&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; START&lt;SPAN class="L0S70"&gt;-&lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;OF&lt;/SPAN&gt;&lt;SPAN class="L0S70"&gt;-&lt;/SPAN&gt;SELECTION&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;IF &lt;/SPAN&gt;rb_good &lt;SPAN class="L0S55"&gt;= &lt;/SPAN&gt;abap_true&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN class="L0S31"&gt;*&amp;nbsp;&amp;nbsp; Dynamic type of "Animal" refer to "Dog"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;CREATE &lt;/SPAN&gt;OBJECT go_animal &lt;SPAN class="L0S52"&gt;TYPE &lt;/SPAN&gt;lcl_dog&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;ELSEIF &lt;/SPAN&gt;rb_bad &lt;SPAN class="L0S55"&gt;= &lt;/SPAN&gt;abap_true&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN class="L0S31"&gt;*&amp;nbsp;&amp;nbsp; Dynamic type of animal is same as static type&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;CREATE &lt;/SPAN&gt;OBJECT go_animal&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;ENDIF&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;TRY &lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; go_dog ?= go_animal&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;MESSAGE &lt;/SPAN&gt;&lt;SPAN class="L0S33"&gt;'Narrowing cast works!!!' &lt;/SPAN&gt;&lt;SPAN class="L0S52"&gt;TYPE &lt;/SPAN&gt;&lt;SPAN class="L0S33"&gt;'I'&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;CATCH &lt;/SPAN&gt;cx_sy_move_cast_error &lt;SPAN class="L0S52"&gt;INTO &lt;/SPAN&gt;gx_cast_err&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gv_msg &lt;SPAN class="L0S55"&gt;= &lt;/SPAN&gt;gx_cast_err&lt;SPAN class="L0S70"&gt;-&amp;gt;&lt;/SPAN&gt;get_text&lt;SPAN class="L0S55"&gt;( &lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;)&lt;/SPAN&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;MESSAGE &lt;/SPAN&gt;gv_msg &lt;SPAN class="L0S52"&gt;TYPE &lt;/SPAN&gt;&lt;SPAN class="L0S33"&gt;'I'&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="L0S52"&gt;ENDTRY&lt;/SPAN&gt;&lt;SPAN class="L0S55"&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR,&lt;/P&gt;&lt;P&gt;Suhas&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: Suhas Saha&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 07 Nov 2012 03:02:57 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/type-casting-clarification/m-p/9147902#M1710071</guid>
      <dc:creator>SuhaSaha</dc:creator>
      <dc:date>2012-11-07T03:02:57Z</dc:date>
    </item>
    <item>
      <title>Re: Type Casting - Clarification</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/type-casting-clarification/m-p/9147903#M1710072</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subclass reference ?= superclass reference is downcasting. But to do it the superclass reference first be up casted using the same subclass reference else it will give cx_sy_move_cast_error because&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A simple rule to remember while down casting.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dynamic type of right hand side class reference should be EQUAL OR MORE GENERAL TO Static type of left hand side class reference.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;subclass reference ?= superclass reference&lt;/P&gt;&lt;P&gt;This will give error if dynamic type of super class reference is not pointing to the object of same sub class as mentioned on left hand side or of super class.&lt;/P&gt;&lt;P&gt;If super class reference points to object of another sub class then it will give you cx_sy_move_cast_error&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ask me&amp;nbsp; if any more doubts.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank You.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Feb 2013 16:04:13 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/type-casting-clarification/m-p/9147903#M1710072</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2013-02-01T16:04:13Z</dc:date>
    </item>
  </channel>
</rss>

