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

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

泛型定义在类上

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

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

一、原始情况

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

/*
//工人类
class Worker
{
}

//操作引用数据类型Worker
class 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
{
}

//操作引用数据类型Worker
class Tool_Worker
{
    private Worker w;

    public void setWorker(Worker w)
    {
        this.w = w;
    }

    public Worker getWorker()
    {
        return w;
    }
}

//操作引用数据类型Student
class 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值