Java中List<T>和List<?>的区别【转载】

`

List、List<?>、List这三者都可以容纳所有的对象,但使用的顺序应该是首选List,次之List<?>,最后选择List,原因如下:

(1) List是确定的某一个类型

List表示的是List集合中的元素都为T类型,具体类型在运行期决定;List<?>表示 的是任意类型,与List类似,而List则表示List集合中的所有元素为Object类 型,因为Object是所有类的父类,所以LiSt也可以容纳所有的类类型,从这一字面 意义上分析,List更符合习惯:编码者知道它是某一个类型,只是在运行期才确定而已。

(2) List可以进行读写操作

List可以进行诸如add、remove等操作,因为它的类型是固定的T类型,在编码期 不需要进行任何的转型操作。

List<?>是只读类型的,不能进行增加、修改操作,因为编译器不知道List中容纳的是 什么类型的元素,也就无毕校验类型是否安全了,而且List<?>读取出的元素都是Object类 型的,需要主动转型,所以它经常用于泛型方法的返回值。注意,List<?>虽然无法增加、修 改元素,但是却可以删除元素,比如执行remove、clear等方法,那是因为它的删除动作与泛型类型无关

List也可以读写操作,但是它执行写入操作时需要向上转型(Upcast),在读 取数据后需要向下转型(Downcast),而此时已经失去了泛型存在的意义了。

打个比方,有一个篮子用来容纳物品,List的意思是说,“嘿,我这里有一个篮子, 可以容纳固定类别的东西,比如西瓜、番茄等”。List<?>的意思是说“嘿,我也有一个篮子, 我可以容纳任何东西,只要是你想得到的”。而List就更有意思了,它说“嘿,我 也有一个篮子,我可以容纳所有物质,只要你认为是物质的东西就都可以容纳进来”。

推而广之,Dao应该比Dao<?>、Dao更先采用,Desc则比Desc<?>、Desc 更优先采用。

Original: https://www.cnblogs.com/fb010001/p/15949414.html
Author: 方斌
Title: Java中List<T>和List<?>的区别【转载】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586183/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球