黑马程序员技术交流社区

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

作者: 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