In Java type arguments, does mean strictly subtypes only? or would E also suffice?
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.
It's not strict; E
would 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.
来源:https://stackoverflow.com/questions/3136680/in-java-type-arguments-does-extends-e-mean-strictly-subtypes-only-or-would