Why we can't do
List<Parent> mylist = ArrayList<child>();
Suppose we could. Then this program would have to be fine:
ArrayList<Banana> bananas = new ArrayList<Banana>(); List<Fruit> fruit = bananas; fruit.add(new Apple()); Banana banana = bananas.get(0);
That's clearly not type safe - you've ended up with an apple in the collection of bananas.
What you can do is:
List<? extends Fruit> fruit = new ArrayList<Banana>();
this is safe, because the compiler won't then let you try to add to the list of fruit. It knows that it's a list of some kind of fruit, so you could write:
Fruit firstFruit = fruit.get(0);
but it doesn't know what exact kind of fruit it's a list of, and make sure you can't do the wrong thing.
See the Java generics FAQ another explanation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With