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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王峰230321 中级黑马   /  2013-7-25 11:53  /  2292 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-25 23:15 编辑

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

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

1.jpg

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

2.jpg

7 个回复

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

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
本帖最后由 深圳在漂移 于 2013-7-25 15:08 编辑

T   后面要用的话 必须都是 T
?  后面要用 后面就没有限制 但是对于泛型本身而言。没有多大本质上的区别。
回复 使用道具 举报
T 是一种类型。
?是泛指(就是通配符)
说白了就是写成T就是将类型固定,而?则不固定

回复 使用道具 举报
泛型两种写法:<T>与<?>,意思是一样的,都可以代表任意类型,
但是如果你在泛型方法中,或者泛型类中,有涉及到该类型的操作,比如用T 定义一个对象,那么用<T>写法

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
草貌路飞 发表于 2013-7-25 12:14
试了下  对象这样定义编译都不能过 引用这样定义什么都不符合这个?的类型..T就代表一变量名,但只代表一个 ...

我回去找视频了.     .  接了两张图.   我在上面 从发一下
回复 使用道具 举报
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());
则不会报错

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
试了下  对象这样定义编译都不能过 引用这样定义什么都不符合这个?的类型..T就代表一变量名,但只代表一个,?在上下限的时候不就代表多个了。也不知道怎么说,反正应该很不一样呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马