• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Generics (again)

 
Graeme Byers
Ranch Hand
Posts: 127
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Line (1) (as expected) caused a compile error "Incompatible types".
Line (2) (as expected) executed sucessfully

Line (3) executed successfully.
But why ? I was expecting a compile error because although Integer is a subclass of Number , <Integer> is not a subclass of <Number>.
Thank you.
 
Pawel Nowacki
Ranch Hand
Posts: 67
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Actually what you can't do is to declare :

List <Number> numList = new ArrayList <Integer>

but you are allowed to hold Integer values in <Number> List.

See Chapter 7 of SCJP 6 Study Guide Book. Page 613 says:

"(...) So here, we're using polymorphism not for the object that the array
reference points to, but rather what the array can actually HOLD - in this case, any
subtype of Animal. You can do the same thing with generics:



So this part works with both arrays and generics collections - we can add an
instance of a subtype into an array or collection declared with supertype.
(...)
"

Hope this helps,
Paul
 
Campbell Ritchie
Sheriff
Posts: 48652
56
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
More complicated than the average beginner's question. Moving
 
Campbell Ritchie
Sheriff
Posts: 48652
56
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Whenever you have generics problems, find the Java Tutorials and Angelika Langer's generics FAQ (I haven't got this link at the moment). There is something in the Java Tutorials about Cage<Lion>s and Cage<Butterfly>s which is similar to your problem.
[ December 30, 2008: Message edited by: Campbell Ritchie ]
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic