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 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.
回答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.