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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘圣伟 中级黑马   /  2012-8-16 12:04  /  2016 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

泛型限定的范围:
*   视频中是这样讲的
*  <? extends E类型> 可以用E类型,和E类型的所有的子类。上线
*  ? super E 可以接受E类型,或者E的父类型; 下限。

class Utils<qq>{
    private qq q;
    public void setObject(qq q){
        this.q = q;
    }
    public qq getObject(){
        return q;
    }
}
想上边的这个类,我们传的类型是QQ,而QQ,
是视频中老师讲的,E类型,还是 ? 呢?

如果是?   我们可不可以这样理解
<? extends E类型> 可以用?类型,和?类型的所有的父类。扩展了上线
*  ? super E 可以接受?类型,或者?的子类型; 扩展了下限。

到底是怎么样的呢?




4 个回复

倒序浏览
这里的qq是泛指的类型,而不是特指的类型。比如传String类型,它就是String类型。而且这里讲的是泛型,不涉及泛型限定的。
泛型限定会写出?extends E和?super E
回复 使用道具 举报
JAVA中还有一种是"?"通配符,表示接受此类型的任意对象。
这里你说的是泛型吧,但是在你定义好的的类中,这个通配符就是有特指的某一个对对象。
或者是你之前定义的是专属于某个类或者方法。extends  是和泛型走的,并不完全这样理解,
根据你的定义和整个程序的结构思路。
回复 使用道具 举报
回复 使用道具 举报
泛型限定的范围:
*   视频中是这样讲的
*  <? extends E类型> 可以用E类型,和E类型的所有的子类。上线
*  ? super E 可以接受E类型,或者E的父类型; 下限。

class Utils<qq>{
    private qq q;
    public void setObject(qq q){
        this.q = q;
    }
    public qq getObject(){
        return q;
    }
}
想上边的这个类,我们传的类型是QQ,而QQ,
是视频中老师讲的,E类型,还是 ? 呢?
解答,这个类定义的泛型就相当于E类型,表示这个类型又调用处决定,因为你不知道传进来参数的是什么类型,如果你在外面创建了一个Utils<String>  ut = new Utils<String>();  这时你创建对象时明确的qq是String类型,你再创建一个对象
Utils<Integer>  ut = new Utils<Integer>();  这就明确了qq是int类型,注意用基本类型指定泛型时,要用它们对应的包装类
所以utils类可以穿件任意类型的对象。
[/table]E是我们定义时要给出的界限类型,
[table=98%]
如果是?   我们可不可以这样理解
<? extends E类型> 可以用?类型,和?类型的所有的父类。扩展了上线          //可以这样理解上限:E是我们定义时要给出的界限类型,?表示的是,你的对象类型只要继承或实现了指定的E界限类型就可以接收。没有关系的就不能接收
*  ? super E 可以接受?类型,或者?的子类型; 扩展了下限。//也可以这样理解:E是我们定义时要给出的界限类型,?表示你的对象类型是E类型的父类就都可以接受你要搞清楚通配符?,是指可以接收任意的泛型类型对象,就是说,假如你声明了好多的泛型类型对象(刚才的utils类对象),这些对象又要调用同一个方法,这个方法就要复写很多遍,一一指点接收类型,就麻烦了,那就要使用到通配符,

到底是怎么样的呢?



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