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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张凯zk47 中级黑马   /  2014-12-9 10:35  /  1220 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

概念:泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以
支持创建可以按类型进行参数化的类。简单的说,就是对要操作的对象指定数据类型,其
用法和形参类似。   如:class Dome<T t>  这里的T就是一个数据类型

泛型后的工具类:

class Tool  //工具类泛型前
{
        private Object obj;
        public void setObject(Object obj)
        {
                this.obj=obj;
        }
}
对于泛型前的Object类型,往往在实例的时候需要考虑强制转换,不仅麻烦还容易引发异常
ClassCastException java jdk1.5版本引入了泛
型机制,解决了这类安全隐患。
class Utils<QQ q>  //工具类泛型后
{
        private QQ q;
        public void setObject(QQ q)
        {
                return q;
        }
}

泛型定义在方法上:
为什么要定义在方法上:因为如上的工具类在类上定义泛型后,那么这个类里面的对象的类型
也就固定了。所以,考虑到为了让不同的对象具备不同的类型,而且类型不确定,那么可以将
泛型定义在方法上。
例如:
class Dome
{
        public <T> void show(T t)
        {
                System.out.println("show"+t);
        }
        public <Q> void print(Q q)
        {
                System.out.println("print"+q);
        }
}
class  GenericDome3
{
        public static void main(String[] args)
        {
                Dome d=new Dome();
                d.show("haha");
                d.show(new Integer(4));
        }
}
泛型类和泛型方法组合使用如下:
class Dome <T>
{
        public  void show(T t)
        {
                System.out.println("show"+t);
        }
        public <Q> void print(Q q)
        {
                System.out.println("print"+q);
        }
}
class  GenericDome3
{
        public static void main(String[] args)
        {
                Dome<String> d=new Dome<String>();
                d.show("haha");
                d.print("haha");
                d.print(new Integer(4));
        }
}
注意:静态方法不可以访问类上定义的泛型,如果静态方法操作的类型不确定,可
以将泛型定义在方法上。


泛型定义在接口上:
interface Inter<T>
{void show(T t)}
class InterImpl<T> implements Inter<T>
{
        public void show(T t)
        {
                System.out.println("show"+t);
        }
}
class GenericDemo
{
        public static void main(String [] args)
        {
                InterImpl i=new InterImpl();
                i.show("hah");
        }
}
泛型的限定:
?通配符,也可以理解为占位符。
?extends E:可以接受E类型或者E的子类型,称为上限。
?super E:可以接受E类型或者E的父类型,成为下限。

class Person
{...}
class Student extends Person
{...}
class Demo
{
        ArrayList<Person> al=new ArrayList<Person>();
        ArrayList<Student> al1=new ArrayList<Student>();
        Iterator<? extends Person>=al.iterator();//(或al1).iterator();这样就既可以迭代Person也可以迭代Student,一般把迭代这部分单独封装成一个功能以提高复用性。
}
下限同理

评分

参与人数 1技术分 +1 收起 理由
船长 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
总结的不错啊`
回复 使用道具 举报
学习了,还没学到泛型的!
回复 使用道具 举报
解释的很清楚,不错
回复 使用道具 举报
真心不错!
回复 使用道具 举报
额 我咋看着这么眼熟呢,貌似是我写的吧
回复 使用道具 举报
额 我咋看着这么眼熟呢,貌似在哪看见过
回复 使用道具 举报
毕姥爷视屏里面的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马