java - Why is casting not working here as I expect? -
this question has answer here:
here sample code:
public class bar extends foo { } @suppresswarnings("unchecked") public class foo { public static void main(string[] args) { foo foo = new bar(); class<foo> x = (class<foo>) foo.getclass(); system.out.println(x); } }
well expecting programs output be: foo.class since casting class see in output:
class bar
why?
if remove casting part code, program not compile:
java: incompatible types required: java.lang.class<foo> found: java.lang.class<capture#1 of ? extends foo>
why compiler forcing me cast?
why?
because class of object bar
, not foo
(you created object new bar()
), , you've explicitly asked the object class is. have foo
reference object, doesn't change object is.
if remove casting part code, program not compile:
that's unrelated foo
/bar
thing. you've given x
specific type (class<foo>
), object#getclass
typed class<?>
.
from comment:
yes well, asked object itself, cased
class<foo>
, stored data in 'x'. confusing me..
casting has no effect on object @ all, casting purely changing type of reference have object. it's same object, unchanged, you've done change type of reference it. can change aspects of object have access to, , can (of course) fail if try cast object isn't.
Comments
Post a Comment