A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟伟杰 中级黑马   /  2013-4-24 01:38  /  1070 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟伟杰 于 2013-4-24 10:27 编辑

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

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

那么,它们有什么区别?

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

2 个回复

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

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
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>.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马