萬用字元 ?
是針對引數而言的。
-
對於
List<? super Integer> l1
:-
正確的理解:
? super Integer
限定的是泛型引數. 令 l1 的泛型引數是 T, 則 T 是 Integer 或 Integer 的父類, 因此 Integer 或 Integer 的子類的物件就可以新增到 l1 中. -
錯誤的理解: ? super Integer限定的是插入的元素的型別, 因此只要是 Integer 或 Integer 的父類的物件都可以插入 l1 中
-
-
對於
List<? extends Integer> l2
:-
正確的理解:
? extends Integer
限定的是泛型引數. 令 l2 的泛型引數是 T, 則 T 是 Integer 或 Integer 的子類, 進而我們就不能找到一個類 X, 使得 X 是泛型引數 T 的子類, 因此我們就不可以向 l2 中新增元素. 不過由於我們知道了泛型引數 T 是 Integer 或 Integer 的子類這一點, 因此我們就可以從 l2 中讀取到元素(取到的元素型別是 Integer 或 Integer 的子類), 並可以存放到 Integer 中. -
錯誤的理解: ? extends Integer 限定的是插入元素的型別, 因此只要是 Integer 或 Integer 的子類的物件都可以插入 l2 中
-