<? extends R> ?匹配的類(lèi)型是R以及R的子類(lèi).確定了類(lèi)型的上限.表示為上界通配符,不能做添加操作(可以進(jìn)行初始化),用于讀取操作.因?yàn)榇_定了上限是R讀取出的所有內(nèi)容均是R本身(或子級(jí))
<? super T>
?匹配的類(lèi)型是T或T的基類(lèi),確定了類(lèi)型的下限.表示為下界通配符,可以進(jìn)行添加操作(只能添加T類(lèi)型或T的子級(jí))因?yàn)椴淮_定基類(lèi)是哪種類(lèi)型讀取時(shí)只能用object接收.
1.1 概念理解
<? super T>:表示?匹配的類(lèi)型都是T的父類(lèi)木张,包括T本身。
<? extends R>:表示?匹配的類(lèi)型都是類(lèi)型R的子類(lèi),包括R本身侨拦。
1.2 使用List協(xié)助理解
1.2.1 List<? extends R>
List<? extends R> list:表示集合中存放的都是R的子類(lèi)(包括R本身)只怎。
針對(duì)變量List<? extends R> list梳凛。
(1)對(duì)List做添加(add(R))操作磕潮,必須使用R或者R的子類(lèi)添加到list中。
(2)對(duì)List做遍歷查詢操作器紧,必須使用R遍歷list耀销,取出元素.
小結(jié):拿到一個(gè)變量使用? extends R修飾時(shí),應(yīng)該是對(duì)該變量做查詢或取元素操作铲汪,不做添加操作熊尉。這種方式修飾叫做get原則。
1.2.2 List<? super T>
List<? super T> list:表示集合中存放的都是T的父類(lèi)(包括T本身)掌腰。
針對(duì)變量List<? super T> list狰住。
(1)對(duì)List做添加(add(T))操作,必須使用T或者T的子類(lèi)添加到list中齿梁。
(2)對(duì)List做遍歷查詢操作催植,必須使用T父類(lèi)去遍歷list,取出元素勺择。
小結(jié):拿到一個(gè)變量使用? super T修飾時(shí)查邢,應(yīng)該是對(duì)該變量做添加操作,不做查詢操作酵幕。這種方式修飾叫做put原則。