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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 淡淡柠檬茶 高级黑马   /  2014-6-5 09:29  /  880 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 淡淡柠檬茶 于 2014-6-5 13:02 编辑

public static void printC0ll(ArrayList<?> al)
{
        Iterator<?> it = d.iterator();
}

public static <T>void printC0ll(ArrayList<T> al)
{
        Iterator<T> it = d.iterator();
}

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
你给的两个方法在JVM看来是一样的

T指的是泛型的固定类型
?是一个通配符,不extends的话,就代表Object下面所有子类

他们仅在很小的地方有差异

例如
class ObjectGen<T extends Object> {
        private T x;
        public ObjectGen(T x) {
         this.x = x;
        }
}  

public class TestGeneric
{
        public static void main(String[] args)
        {
                String st = "";
               
                //可编译
                ObjectGen<String> obj1 = new ObjectGen<String>(st);  
                //不可编译
                ObjectGen<T extends Object> obj2 = new ObjectGen<String>(st);
                //可编译
                ObjectGen<? extends Object> obj3 = new ObjectGen<String>(st);
        }
}


obj1 可编译是因为,T被指定为具体的类型,可通过。
obj2不可编译是因为,T无法被接受,报错信息:T无法被解析为一个type。
obj3可编译是因为,?不是固定类型,它可以接受Object下面任何子类。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 很给力!

查看全部评分

回复 使用道具 举报
李小然 发表于 2014-6-5 12:15
你给的两个方法在JVM看来是一样的

T指的是泛型的固定类型

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