黑马程序员技术交流社区

标题: 泛型中. <T>和<?> 的区别到底是什么? [打印本页]

作者: 王峰230321    时间: 2013-7-25 11:53
标题: 泛型中. <T>和<?> 的区别到底是什么?
本帖最后由 杨兴庭 于 2013-7-25 23:15 编辑

这个概念有点含糊.  感觉 老师 也没怎么 强调.  现在有点忘了 .    感觉功能上 是一样的啊.

1.jpg (53.24 KB, 下载次数: 0)

1.jpg

2.jpg (21.03 KB, 下载次数: 0)

2.jpg

作者: 草貌路飞    时间: 2013-7-25 12:14
试了下  对象这样定义编译都不能过 引用这样定义什么都不符合这个?的类型..T就代表一变量名,但只代表一个,?在上下限的时候不就代表多个了。也不知道怎么说,反正应该很不一样呀
作者: 付龙    时间: 2013-7-25 12:16
T   后面要用的话 必须都是 T?  后面要用 就不会有限制但是对于泛型本身而言。没有啥本质区别。
说白了就是写成T就是将类型固定,而?则不固定,比如下面这个例子
public class CollectionGenFoo<T extends Collection> {
...
}

这么写就会报错
CollectionGenFoo<Collection> listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());

如果把 CollectionGenFoo<T extends Collection> 改成 CollectionGenFoo<? extends Collection>的话
CollectionGenFoo<Collection> listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
则不会报错
作者: 王峰230321    时间: 2013-7-25 12:23
草貌路飞 发表于 2013-7-25 12:14
试了下  对象这样定义编译都不能过 引用这样定义什么都不符合这个?的类型..T就代表一变量名,但只代表一个 ...

我回去找视频了.     .  接了两张图.   我在上面 从发一下
作者: 一木榜公    时间: 2013-7-25 12:34
泛型两种写法:<T>与<?>,意思是一样的,都可以代表任意类型,
但是如果你在泛型方法中,或者泛型类中,有涉及到该类型的操作,比如用T 定义一个对象,那么用<T>写法
作者: HM代景康    时间: 2013-7-25 13:46
T 是一种类型。
?是泛指(就是通配符)
说白了就是写成T就是将类型固定,而?则不固定


作者: 深圳在漂移    时间: 2013-7-25 15:06
本帖最后由 深圳在漂移 于 2013-7-25 15:08 编辑

T   后面要用的话 必须都是 T
?  后面要用 后面就没有限制 但是对于泛型本身而言。没有多大本质上的区别。
作者: liuzhming    时间: 2013-7-25 15:17
在定义泛型类别时,预设可以使用任何的类型来实例化泛型类型中的类型,但是如果想要限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口。当没有指定泛型继承的类型或接口时,默认使用T extends Object,所有默认情况下任何类型都可以作为参数传入。现在有这么一个需求,希望有一个参考名称foo可以接受所有下面的实例:
foo = new GenericFoo<ArrayList>();
foo = new GenericFoo<LinkedList>();
简单来说,实例化类型持有者时,它必须是实现List的类别或其子类别。这时,就要用’?’通配符,并使用”extends”关键字限定类型持有者。我们就可以这样写:GenericFoo<? Extends List> foo = null;这样就可以让foo指向上面的类型了。<?>的意思也是<? extends Object>。<T>在定义类使用,而<?>是创建对象时使用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2