If I have a method in MyClass such as
setSuperClassList(List<Superclass>)
...should I be able to do this:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
It appears this won't compile. Why?
If I have a method in MyClass such as
setSuperClassList(List<Superclass>)
...should I be able to do this:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
It appears this won't compile. Why?
It won't compile sincejava.util.List is not covariant.
Try setSuperClassList(List<? extends Superclass>) instead.
Try setSuperClassList(List<? extends Superclass>).
Also check PECS to see wether you should use ? extends or ? super.
You are just doing the generics a bit wrong. Add the ? extends bit, and that will allow the passed in list to contain the SuperClass or any of its subclasses.
setSuperClassList(List<? extends Superclass>)
This is called setting an upper bound on the generics.
The statement List<Superclass> says that the List can only contain SuperClass. This excludes any subclasses.
Do:
setSuperClassList(List<? extends Superclass> list)
This will allow a list of any subclass of Superclass.