黑马程序员技术交流社区

标题: 泛型问题 [打印本页]

作者: 钟伟杰    时间: 2013-4-24 01:38
标题: 泛型问题
本帖最后由 钟伟杰 于 2013-4-24 10:27 编辑

Collection中有很多方法要指定泛型的,为了便于查看,找到几个符号的解释:
? 通配符。也可以理解为占位符。而且是接受任意。
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限

看到解释有个疑问:
List<?> :?是通配符,意味着可以匹配各种对象。
List<Object>:Object是所有类的超类,也意味着可以匹配各种对象。

那么,它们有什么区别?

作者: ゞSunペ果果つ    时间: 2013-4-24 07:23
如果是<?>传入的类型,如果你想操作是不需要转型的,可以直接进行该类型的属性和方法调用
(假如你传入的是类的对象),如果你用了<Object>是不是需要进行强制类型转换?
我就是这样觉得,其他的不同点希望别的大神前来指导,
如果有其他区别请告诉我一声哦。让我也提高提高。
我觉得就是因为转型麻烦才会用?,老毕的视频讲解的时候就是用先转型
接着最后为了方便啥的好像引入的<>泛型。
作者: 沉淀着的你    时间: 2013-4-24 08:47
List<?> 和  List<Object>

这两个是有区别的呢;
相同点:  当调用 list.add()方法的话是可以插入任意类型;
不同点:     一个简单的例子    例如 :                 
List<? > list = new ArrayList<String>();         //没问题
List<Object> list1 = new ArrayList<String>(); //编译器会提示cannot convert from ArrayList<String> to List<Object>
改成这样的话则   List<? extends Object> list2 = new ArrayList<String>();  //没问题
说明对于  ? 表示任意类型;在类型转换的时候也是任意的;
但是对于  List<Object> 在类型转换的时候反而不能为任意类型,除非声明上下界 List<? extends Object>.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2