Reputation: 19223
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?
Upvotes: 9
Views: 13163
Reputation: 4635
Do:
setSuperClassList(List<? extends Superclass> list)
This will allow a list of any subclass of Superclass.
Upvotes: 0
Reputation: 138982
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.
Upvotes: 6
Reputation: 25411
Try setSuperClassList(List<? extends Superclass>)
.
Also check PECS to see wether you should use ? extends
or ? super
.
Upvotes: 23
Reputation: 92126
It won't compile sincejava.util.List
is not covariant.
Try setSuperClassList(List<? extends Superclass>)
instead.
Upvotes: 1