轉載:Java中List和List的區別

List<T>、List<?>、List<Object>這三者均可以容納全部的對象,但使用的順序應該是首選List<T>,次之List<?>,最後選擇List<Object>,緣由以下:安全

(1) List<T>是肯定的某一個類型編碼

List<T>表示的是List集合中的元素都爲T類型,具體類型在運行期決定;List<?>表示 的是任意類型,與List<T>相似,而List<Object>則表示List集合中的全部元素爲Object類 型,由於Object是全部類的父類,因此LiSt<Object>也能夠容納全部的類類型,從這一字面 意義上分析,List<T>更符合習慣:編碼者知道它是某一個類型,只是在運行期才肯定而已。.net

(2) List<T>能夠進行讀寫操做對象

List<T>能夠進行諸如add、remove等操做,由於它的類型是固定的T類型,在編碼期 不須要進行任何的轉型操做。blog

List<?>是隻讀類型的,不能進行增長、修改操做,由於編譯器不知道List中容納的是 什麼類型的元素,也就無畢校驗類型是否安全了,並且List<?>讀取出的元素都是Object類 型的,須要主動轉型,因此它常常用於泛型方法的返回值。注意,List<?>雖然沒法增長、修 改元素,可是卻能夠刪除元素,好比執行remove、clear等方法,那是由於它的刪除動做與泛型類型無關rem

List<Object>也能夠讀寫操做,可是它執行寫入操做時須要向上轉型(Upcast),在讀 取數據後須要向下轉型(Downcast),而此時已經失去了泛型存在的意義了。編譯器

打個比方,有一個籃子用來容納物品,List<T>的意思是說,「嘿,我這裏有一個籃子, 能夠容納固定類別的東西,好比西瓜、番茄等」。List<?>的意思是說「嘿,我也有一個籃子, 我能夠容納任何東西,只要是你想獲得的」。而List<Object>就更有意思了,它說「嘿,我 也有一個籃子,我能夠容納全部物質,只要你認爲是物質的東西就均可以容納進來」。編譯

推而廣之,Dao<T>應該比Dao<?>、Dao<Object>更先採用,Desc<Person>則比Desc<?>、Desc<Object> 更優先採用。
---------------------
做者:你是個人天晴
來源:CSDN
原文:https://blog.csdn.net/lexang1/article/details/49593011
版權聲明:本文爲博主原創文章,轉載請附上博文連接!ast

相關文章
相關標籤/搜索