This week's book giveaway is in the Jobs Discussion forum.
We're giving away four copies of Customer Requirements for Developers and have Marcho Behler on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Generics, Collections and Intefaces Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Customer Requirements for Developers this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Generics, Collections and Intefaces" Watch "Generics, Collections and Intefaces" New topic

Generics, Collections and Intefaces

Alfred Lysebraate

Joined: Jul 22, 2008
Posts: 3
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?


Joanne Neal

Joined: Aug 05, 2005
Posts: 3742
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

Joined: Jul 22, 2008
Posts: 3
I did not see that right away, but a rather simple reasoning. Thank you!
Rob Spoor

Joined: Oct 27, 2005
Posts: 20049

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.

How To Ask Questions How To Answer Questions
I agree. Here's the link:
subject: Generics, Collections and Intefaces
It's not a secret anymore!