那声明它是一个列表的东西,是Integer的超类型,而不是列表可以包含任何东西,它们是Integer的超类型。换句话说,对于编译器来说,它可能是a
List<Integer>,a
List<Number>或a
List<Object>,但是它不知道哪个,因此您不能只向List添加任何内容。您唯一可以安全添加的是Integer,因为可以保证它是List可能包含的任何类型的子类型。
换句话说,
?表示 一种 类型,而不是 任何 类型。这是一个不明显但重要的区别。

那声明它是一个列表的东西,是Integer的超类型,而不是列表可以包含任何东西,它们是Integer的超类型。换句话说,对于编译器来说,它可能是a
List<Integer>,a
List<Number>或a
List<Object>,但是它不知道哪个,因此您不能只向List添加任何内容。您唯一可以安全添加的是Integer,因为可以保证它是List可能包含的任何类型的子类型。
换句话说,
?表示 一种 类型,而不是 任何 类型。这是一个不明显但重要的区别。