黑马程序员_日记49_泛型定义在类上

来源:互联网 发布:淘宝小女孩子长裙礼服 编辑:程序博客网 时间:2024/06/16 08:57

 ——- android培训、java培训、期待与您交流! ———-

泛型定义在类上

泛型什么时候要定义在类上呢?
当需要的时候?
什么时候需要呢?
当需要的引用数据类型不确定的时候。

注意:早期是用Object来完成的,缺点是需要强制转换。

一、原始情况

1 定义Worker类–引用数据类型
2 定义工具类操作Worker

/*//工人类class Worker{}//操作引用数据类型Workerclass Tool_Worker{    private Worker w;    public void setWorker(Worker w)    {        this.w = w;    }    public Worker getWorker()    {        return w;    }}//主类class GenericDemo3{    public static void main(String[] args)    {        Tool_Worker tw = new Tool_Worker();        tw.setWorker(new Worker());        tw.getWorker();    }}

二、当有学生类和工人类两个类的时候,就要定义两个工具类

//学生类class Student{}class Worker{}//操作引用数据类型Workerclass Tool_Worker{    private Worker w;    public void setWorker(Worker w)    {        this.w = w;    }    public Worker getWorker()    {        return w;    }}//操作引用数据类型Studentclass Tool_Student{    private Student s;    public void setStudent(Student s)    {        this.s = s;    }    public Student getStudent()    {        return s;    }}//主类class GenericDemo3{    public static void main(String[] args)    {        //操作Worker        Tool_Worker tw = new Tool_Worker();        tw.setWorker(new Worker());        tw.getWorker();        //操作Student        Tool_Student ts = new Tool_Student();        ts.setStudent(new Student());        ts.getStudent();    }}

三、JDK1.5以前使用Object来解决

//Object定义的工具类class Student{}class Worker{}class Tool{    //工具类传递的引用类型不确定    private Object obj;    //set    public void setObject(Object obj)    {        this.obj = obj;    }    //get    public Object getObject()    {        return obj;    }}class GenericDemo3{    public static void main(String[] args)    {        //操作Worker        Tool t = new Tool();        //t.setObject(new Student());//运行时候,发生类型转换异常        t.setObject(new Worker());//需要程序员主观判断该传什么类        //强制转换        Worker w =(Worker)t.getObject();    }}

四、JDK1.5以后使用泛型来解决

//泛型定义的工具类class Student{}class Worker{}//泛型定义在类上class Tool<T>{    //工具类传递的引用类型不确定    private T t;    //set    public void setObject(T t)    {        this.t = t;    }    //get    public T getObject()    {        return t;    }}class GenericDemo3{    public static void main(String[] args)    {        //操作Worker        Tool<Worker> t = new Tool<Worker>();        //t.setObject(new Student());//编译的时候,发生错误,由程序员解决,这样安全了        t.setObject(new Worker());//不需要程序员主观判断该传什么类,客观的检测需要传什么引用类型        //不需要强制转换        Worker w =t.getObject();    }}

以后设计到操作的引用类型不确定的时候就把泛型定义在类上!

0 0
原创粉丝点击