转载: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

相关文章
相关标签/搜索