黑马程序员技术交流社区
标题:
泛型问题
[打印本页]
作者:
Inspur
时间:
2013-9-15 16:44
标题:
泛型问题
本帖最后由 Inspur 于 2013-9-20 10:55 编辑
在做泛型练习时,有一道题目:自定义泛型方法,打印出任意参数化类型的集合中的所有内容public void printCollection(Collection<?> col)
{
//打印代码
}
和
public <T>void printCollection(Collection<T> col)
{
//打印代码
}
这两种方式有什么区别,求高手指教,谢谢
作者:
袁梦希
时间:
2013-9-15 17:50
通配符 ? 指的是传进来什么参数类型都可以 而用T表示呢说明该集合的类型只能是T类型 也可能是向上限定或者向下限定
作者:
hanfei2511
时间:
2013-9-15 18:45
首先,“?”是类型通配
符,它可以表示任意的类型,而T表示一个特定的类型,包括自定义的泛型类型。
在后面这种代码中:在返回值前面加了<T>,是为了告诉编译器T是一个新的类型,否则后面参数中的T处就会报错,因为编译器不知道T是什么。加上<T>之后,就说明传递的数组参数可以是任意类型的。而在第一中情况中,用“?”号 就不会出现这种问题。
作者:
酱爆
时间:
2013-9-15 20:45
楼上说的对极了!!!!!{:soso_e142:}
作者:
陈国柱
时间:
2013-9-15 22:19
使用通配符,不能调用对象的某些特定方法,如Collection的add()方法,同过查阅API可知add方法后面是打上任意类型E的,不是通配符,只能调用一些对象的共性方法,如对象都有大小size(),在Collection里面的size方法就没有任意对象的限定。而是用任意对象E就不存在这样的问题了,对象的所有方法都可以调用
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2