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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王轶 黑马帝   /  2011-9-25 10:15  /  2621 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自定义泛型<t>与<?>有什么区别
如题

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

6 个回复

倒序浏览
黑马网友  发表于 2011-9-25 10:32:59
沙发
区别就是某一类型是确定的,通配符只能调用与参数类型无关的方法,而T类型可以调用与参数类型相关的方法。
回复 使用道具 举报
写<?>一般编译器不会通过的,要么指定类型,要么不写类型。

而在自定义类型的泛型,在调用的时候不需要强制类型转换,在接收的时候则只能接受同一种类型。

不写类型,默认是指定object类型,这时在接收时,可以接收任意类型。在调用时,根据自身的实际需求看是否进行类型转换。

这两种情况要分清楚自己程序的需要来决定使用哪种方式使用泛型

[ 本帖最后由 许晨峰 于 2011-09-25  10:39 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-25 16:40:37
板凳
使用<T>来声明类型持有者名称,自定义泛型类时,类持有者名称可以使用T(Type),如果是容器的元素可以使用E(Element),若键值匹配可以用K(Key)和V(Value)等,若是<?>,则是默认是允许Object及其下的子类,也就是java的所有对象了。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-25 17:55:56
报纸
如果是方法返回值或者类的泛型要和参数泛型一样,则用<T>
另外如果你有两个参数,都要求有同样的泛型,用<T>
回复 使用道具 举报
使用<T>来声明类型持有者名称,自定义泛型类时,类持有者名称可以使用T(Type),如果是容器的元素可以使用E(Element),若键值匹配可以用K(Key)和V(Value)等,若是<?>,不写类型,默认是指定object类型,这时在接收时,可以接收任意类型。在调用时,根据自身的实际需求看是否进行类型转换。
[ 本帖最后由 赵江锋 于 2011-09-25  19:04 编辑 ]
回复 使用道具 举报
许冉 黑马帝 2011-9-25 19:27:06
7#
我是这么理解的,先区分 再学会选择用哪个
?表示这里要写一个已有的类名,只是不知道是哪个类名而已
要用T,那么就得先定义T,在哪定义,在类名的后面或方法返回值的前面
public static void show(Collection<?> c)
public static <T> void show(Collection<T> c)
这面两种对方法的定义是一样的
看懂这两句就能将它们区分开来
在show方法中想要用未知类型的变量
?  x;       //这是不允许的,? 不能拿来定义一个变量
T  x;    //这样写没问题
看懂这两句就会选择用哪个了
[ 本帖最后由 xuan 于 2011-09-25  23:41 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马