1. 程式人生 > >JAVA-初步認識-常用對象API(集合框架-泛型-泛型限定-上限的體現)

JAVA-初步認識-常用對象API(集合框架-泛型-泛型限定-上限的體現)

但是 查看 ava 接收 可能 自然 隱患 post 定義

一.

現在要說應用,查看一下API中的註釋,

技術分享圖片

技術分享圖片

這裏有一個方法addAll裏面有extedns E,我們看一下這個方法什麽時候用。下面這三個集合,有存儲person,student,還有worker的。

技術分享圖片

再接下來演示一下這個高級應用,如果我們要去想定義一下集合的話,(描述一下集合)

這個類裏面加入的元素不確定的情況下,寫的是個E,明確什麽類型,add方法中添加的也是什麽類型。一次添加一個元素比較慢,addAll方法可以添加一堆元素,

一般情況下,就是這麽寫。(addAll又將mycollection加入挺奇怪的,沒看懂) 裏面裝什麽類型(裏面是指開頭class後面泛型裏的類型),我再添加新集合的時候,這集合也是什麽類型(API中對於這個方法是有描述的,將一個集合添加進入某一個集合中)。為什麽呢?

技術分享圖片

現在又有一個集合al4,往裏面裝的是string類型,不再一次添加一個元素,采用addAll方法直接將string集合添加進來。這裏是不行的,規定了mycollection<E>中類型一致,這裏的al4和al1中不是同一個類型。

技術分享圖片

如果不加泛型限定,能不能添加進來?如下圖所示,將所有的泛型去掉。是可以的,為什麽?

技術分享圖片

因為沒有指定泛型,就是object,反正都是對象都可以往裏面放。下面例子中,輸出的元素的個數為3,有兩個person對象,還有一個字符串對象。取得時候會出問題。

技術分享圖片

技術分享圖片

現在解釋,為什麽class開頭和裏面定義得方法都要同時是E的原因,要是類型不匹配,我明確的是person,但是往裏面放的是字符串,取的時候轉成字符串還是person是不清楚的,就會出事,會有安全隱患。

上面的例子就是一個集合中規定了類型是person,如果有其它集合中的元素想要存入該集合中,必須要保證類型一致,不然編譯時會出錯,或者開發平臺會提示你出錯。

技術分享圖片

經過一段時間,person產生了一些子類對象,比如說worker就是al2,現在想要將al2放進來。這是可以的,為什麽呢?輸出ptint.size的結果是四個,取得時候是按照person類型來取,因為al2是放置到al1中了,取得時候自然是按照al1來取得。person是可以接收student的,mycolleciton這個方法可以接收新集合中存儲E類型元素的,也可以是E類型的子類的,因為取沒有問題。

技術分享圖片

取的時候不存在類型安全隱患,addAll方法擴展性很強,按理說寫個E就可以了,現在擴展了子類來了也是可以的。

什麽時候用這個呢?存儲的時候,用的都是上限。這裏的存儲可能是說的class開頭的mycollection的位置。

元素是對象,上限是類型,

技術分享圖片

JAVA-初步認識-常用對象API(集合框架-泛型-泛型限定-上限的體現)