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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Inspur 中级黑马   /  2013-9-15 16:44  /  1108 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Inspur 于 2013-9-20 10:55 编辑

在做泛型练习时,有一道题目:自定义泛型方法,打印出任意参数化类型的集合中的所有内容public void printCollection(Collection<?> col)
{
    //打印代码
}

public <T>void printCollection(Collection<T> col)
{
    //打印代码
}
这两种方式有什么区别,求高手指教,谢谢

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

4 个回复

倒序浏览
通配符   ?  指的是传进来什么参数类型都可以    而用T表示呢说明该集合的类型只能是T类型   也可能是向上限定或者向下限定
回复 使用道具 举报
首先,“?”是类型通配符,它可以表示任意的类型,而T表示一个特定的类型,包括自定义的泛型类型。
在后面这种代码中:在返回值前面加了<T>,是为了告诉编译器T是一个新的类型,否则后面参数中的T处就会报错,因为编译器不知道T是什么。加上<T>之后,就说明传递的数组参数可以是任意类型的。而在第一中情况中,用“?”号 就不会出现这种问题。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上说的对极了!!!!!{:soso_e142:}
回复 使用道具 举报
使用通配符,不能调用对象的某些特定方法,如Collection的add()方法,同过查阅API可知add方法后面是打上任意类型E的,不是通配符,只能调用一些对象的共性方法,如对象都有大小size(),在Collection里面的size方法就没有任意对象的限定。而是用任意对象E就不存在这样的问题了,对象的所有方法都可以调用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马