wiki
A bounded wildcard is one with either an upper or a lower inheritance constraint. The bounds can be both class and interface types. Upper bounds are expressed using the extends keyword and lower bounds using the super keyword. An upper bound on a wildcard must be a subtype of the upper bound on the type parameter it is assigned.
Generic<? extends SubtypeOfUpperBound> referenceConstrainedFromAbove;
This reference can hold any instantiation of Generic with an actual type parameter of SubtypeOfUpperBound’s subtype. A wildcard that does not have an upper bound is effectively the same as one that has the constraint extends Object, since all types implicitly extend Object. A wildcard with a lower bound
Generic<? super SubtypeOfUpperBound> referenceConstrainedFromBelow;
can hold instantiations of Generic with any type that is both a subtype of UpperBound and a supertype of SubtypeOfUpperBound. The type bounds are trivial examples that conform.
Generic 可以是LIST,SET等等
? extends SubtypeOfUpperBound 代表一个上界,?代表任意继承了SubtypeOfUpperBound 的类的实例均可以向内传递,
或者可以说是继承了SubtypeOfUpperBound的子类型
SubtypeOfUpperBound 可以是类或interface。
super SubtypeOfUpperBound 代表一个下界,任意SubtypeOfUpperBound 的父类型,可以给referenceConstrainedFromBelow这个引用声明任意父类型的变量