List<T>和List<?>的区别

一、简介

 <T>在List、Set、Map中经常见到,用来限制Class中的参数类型,确保Class中参数的一致性。例如:List<String> list = new ArrayList<>();创建了一个内部参数是String类型的类,list中的操作对象都是String。<?>代表任意java类型,只有在不关心数据的具体类型下才使用通配符表示,但在一些情况下,需要将<?>传入的数据进行强转,但这样不如直接传入<T>。

另外除了<?>,还有<? extends T>上界通配符和<? super T>下界通配符。<? extends T> 表示传入数据值需要是T类型或T的子类,<? suprt T>表示传入数据值需要是T类型或T的超类。

一般来说,<?>主要用于变量上,<T>主要用于类或方法上。下图中,list的元素类型为?,但往里边添加String时,会显示出错,因为list中的类型是一个未知的java类型,不属于任何类,所以往里边添加数据时会出错。但可以从list中取出数据,取出的数据类型为Object。 

建议采用的顺序是 List<T>、List<?>、List<Object>

二、代码实例

List<?>是只读类型的,不能进行增加、修改操作。

上一篇:Java面试题总结(附答案)

下一篇:【全栈最全Java框架总结】SSH、SSM、Springboot

猜你喜欢

转载自blog.csdn.net/guorui_java/article/details/111363761