问题
In Java type arguments, does mean strictly subtypes only? or would E also suffice?
回答1:
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 Typeand stands for the family of all types that are subtypes ofType, typeTypebeing included.Typeis called the upper bound.A wildcard with a lower bound looks like
? super Typeand stands for the family of all types that are supertypes ofType, typeTypebeing included.Typeis called the lower bound.
回答2:
It's not strict; E would suffice.
回答3:
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