4、有界泛型
<? extends T>:是指 “ 上界通配符 (Upper Bounds Wildcards) ”
<? super T>:是指 “ 下界通配符 (Lower Bounds Wildcards) ”
如 List<? extends T> 大家以為元素為 T以及其所有子類的對象 的List。其實不是。元素類型 僅指T的某一個不確定的子類,是單一的一個不確定類,沒有具體哪個類。因此不能插入一個不確定的。
List<? super T> 大家以為元素為 T以及其父類的對象 的List。其實不是,元素類型 僅指T的某一個不確定的父類,是單一的一個不確定類(只確定是T的父類),沒有具體哪個類。
因此:
不能往List<? extends T>中插入任何類型的對象。唯一可以保證的是,你可以從中讀取到T或者T的子類。
可以往List<? super T>中插入T或者T子類的對象,但不可以插入T父類的對象??梢宰x取到Object或者Object子類的對象(你并不知道具體的子類是什么)。
如果頻繁支持讀取數(shù)據(jù),不要求寫數(shù)據(jù),使用<? extends T>。即生產(chǎn)者 使用 <? extends T>
如果頻繁支持寫入數(shù)據(jù),不特別要求讀數(shù)據(jù),使用<? super T>。即消費者 使用 <? super T>
如果都需要支持,使用<T>。