• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Generics, Collections and Intefaces

 
Alfred Lysebraate
Greenhorn
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello everybody. This is my first post on this forum, and it is about Java generics.
Is there a obvious reason why the code below does not compile? The compiler can clearly figure out that Car implements the contract of a vehicle?!
Does this have something to do with type erasure in Java?

Thanks.

 
Joanne Neal
Rancher
Posts: 3742
16
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Think about the following codeIf you knew nothing about the getVehicles method you would think it would be fine. But the getVehicles method is actually returning a List that was defined to contain only Cars, but you are trying to add a Bus to that List.
 
Alfred Lysebraate
Greenhorn
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I did not see that right away, but a rather simple reasoning. Thank you!
 
Rob Spoor
Sheriff
Pie
Posts: 20545
56
Chrome Eclipse IDE Java Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You could solve it by having the repo return a List<? extends Vehicle> instead. Now you can return List<X> where X is either Vehicle, a sub interface, or an implementation of Vehicle or a sub interface.

The issue with List<? extends Vehicle> is that, like Joanne has shown, you cannot add anything since the compiler doesn't know exactly what the ? stands for.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic