Here’s a summary of the three:
-
List
: A list with no type parameter. It is a list whose elements are of any type — the elements may be of different types. -
List<?>
: A list with an unbounded type parameter. Its elements are of a specific, but unknown, type; the elements must all be instances of some specific type. -
List<T extends E>
: A list with a type parameter calledT
. The supplied type forT
must be of a type that extendsE
, or it is not a valid type for the parameter.