PECS原則

Producer Extends Consumer Super

如果參數(shù)化類(lèi)型表示一個(gè)生產(chǎn)者,就使用<? extends T>;如果它表示一個(gè)消費(fèi)者,就使用<? super T>

個(gè)人理解

在閱讀阿里巴巴Java開(kāi)發(fā)手冊(cè)時(shí)看到這個(gè)原則,于是就學(xué)習(xí)了一番.
個(gè)人認(rèn)為這個(gè)原則重點(diǎn)的地方在于理解List<? extends Fruit>List<? super Apple>中的 ? 代表的意思.

List<? extends Fruit>的泛型集合中,對(duì)于元素的類(lèi)型,編譯器只能知道元素是繼承自Fruit,具體是Fruit的哪個(gè)子類(lèi),這是無(wú)法知道的,所以向一個(gè)無(wú)法知道具體類(lèi)型的泛型集合中插入元素是不能通過(guò)編譯的.但是,由于知道元素是繼承自Fruit,所以從這個(gè)泛型集合中取Fruit類(lèi)型的元素是可以的.

List<? super Apple>的泛型集合中,元素的類(lèi)型是Apple的父類(lèi),但無(wú)法知道是哪個(gè)具體的父類(lèi),因此讀取元素時(shí)無(wú)法確定以哪個(gè)父類(lèi)進(jìn)行讀取.插入元素時(shí),可以插入Apple與Apple的子類(lèi),因?yàn)檫@個(gè)集合中的元素都是Apple的父類(lèi).

總結(jié)

只讀不可寫(xiě)時(shí),使用List<? extends Fruit>:Producer
只寫(xiě)不可讀時(shí),使用List<? super Apple>:Consumer

參考

Java泛型中的PECS原則
Java 泛型: 什么是PECS(Producer Extends, Consumer Super)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容