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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yp324 中级黑马   /  2013-6-4 20:05  /  1720 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java泛型中<?>和<T>有什么区别?今天在看张孝祥老师的高新和毕向东老师基础中讲的泛型,发现这没有对<?>和<T>的差别
进行说明,而两者在用法上也差不多。不知道具体有什么区别?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
在毕老师的视频中讲到了
用<T>来表示未知类型的泛型的话,T就相当于一个具体类型。
这样就可以用来接收和操作这个类型。

如:
这是通配符?的方式:
public static void printColl(ArrayList<?> al)
        {
                Iterator<?> it = al.iterator();


                while(it.hasNext())
                {
                        System.out.println(it.next().toString());
                }
           }
这是T的方式:
public static <t>void printColl(ArrayList<T> al)
        {
                Iterator<T> it = al.iterator();


                while(it.hasNext())
                {
                                                 T t=it.next();//可以使用T来接收和操作这个类型,而通配符?就不可以这么写
                        System.out.println(it.next().toString());
                }
         }
以上是老师的源码,楼主可以在视频第15天-12视频中看到。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
简单的说 <?>可以匹配任何类型,<T>确定了一种。 T 是一种类型。?是泛指(就是通配符)。
说白了就是写成T就是将类型固定,而?则不固定,比如下面这个例子
这么写就会报错CollectionText<Collection> list = new CollectionText<ArrayList>(new ArrayList());
如果把 CollectionText<T extends Collection> 改成CollectionText<?extends Collection> list = new CollectionText<ArrayList>(new ArrayList());则不会报错

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
这里的 ? 则是通配符 ,? 作为类型实参传给集合。
而 <T> 则是在定义泛型类或泛型方法时使用 <T> 来代替某特定类。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
老毕的最后一个视频讲的高级泛型里面讲了<T>如果里面传的是一个具体类型的话这个具体类型可以接收并操作这个类型
<T>代表一个可以传一个具体的类型<?>不明确类型,是一个通配符,或者是占位符。

VTKFM{DG{%%EPV_@C__Y0IH.jpg (23.15 KB, 下载次数: 0)

t

t

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
luckwei 发表于 2013-6-4 22:50
老毕的最后一个视频讲的高级泛型里面讲了如果里面传的是一个具体类型的话这个具体类型可以接收并操作这个类 ...

挺好
回复 使用道具 举报
楼主你好  如果问题已经解决  请把帖子的类型改为已解决  然后会给你发几个粽子吃
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马