In Java type arguments, does mean strictly subtypes only? or would E also suffice?
views:
115answers:
4In Java type arguments, does <? extends E> mean strictly subtypes only? or would E also suffice?
List<? extends Animal> animalList=new List<Dog>();
List<? extends Animal> animalList=new List<Animal>();
Both the lines compile without any error. Any function taking the list as a parameter understands that the objects in the list are of type E or a subtype of E.
Yes, super
and extends
gives inclusive lower and upper bounds respectively.
Here's a quote from Angelika Langer's Generics FAQ:
What is a bounded wildcard?
A wildcard with an upper bound looks like
? extends Type
and stands for the family of all types that are subtypes ofType
, typeType
being included.Type
is called the upper bound.A wildcard with a lower bound looks like
? super Type
and stands for the family of all types that are supertypes ofType
, typeType
being included.Type
is called the lower bound.
E is always a subtype of E, which means that E is a supertype of E, too. (JLS 4.10, Effective Java SE Item 26)