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?
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.
Joined: Jul 22, 2008
I did not see that right away, but a rather simple reasoning. Thank you!
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.