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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© itheima_llt 高级黑马   /  2015-4-16 13:16  /  318 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

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

一、原始情况
1 定义Worker类--引用数据类型
2 定义工具类操作Worker
  1. //工人类
  2. class Worker
  3. {
  4. }

  5. //操作引用数据类型Worker
  6. class Tool_Worker
  7. {
  8.         private Worker w;

  9.         public void setWorker(Worker w)
  10.         {
  11.                 this.w = w;
  12.         }

  13.         public Worker getWorker()
  14.         {
  15.                 return w;
  16.         }
  17. }

  18. //主类
  19. class GenericDemo3
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Tool_Worker tw = new Tool_Worker();
  24.                 tw.setWorker(new Worker());
  25.                 tw.getWorker();
  26.         }
  27. }
复制代码
二、当有学生类和工人类两个类的时候,就要定义两个工具类
  1. //学生类
  2. class Student
  3. {
  4. }

  5. class Worker
  6. {
  7. }

  8. //操作引用数据类型Worker
  9. class Tool_Worker
  10. {
  11.         private Worker w;

  12.         public void setWorker(Worker w)
  13.         {
  14.                 this.w = w;
  15.         }

  16.         public Worker getWorker()
  17.         {
  18.                 return w;
  19.         }
  20. }

  21. //操作引用数据类型Student
  22. class Tool_Student
  23. {
  24.         private Student s;

  25.         public void setStudent(Student s)
  26.         {
  27.                 this.s = s;
  28.         }

  29.         public Student getStudent()
  30.         {
  31.                 return s;
  32.         }
  33. }

  34. //主类
  35. class GenericDemo3
  36. {
  37.         public static void main(String[] args)
  38.         {
  39.                 //操作Worker
  40.                 Tool_Worker tw = new Tool_Worker();
  41.                 tw.setWorker(new Worker());
  42.                 tw.getWorker();

  43.                 //操作Student
  44.                 Tool_Student ts = new Tool_Student();
  45.                 ts.setStudent(new Student());
  46.                 ts.getStudent();
  47.         }
  48. }
复制代码
三、JDK1.5以前使用Object来解决
  1. //Object定义的工具类
  2. class Student
  3. {
  4. }

  5. class Worker
  6. {
  7. }

  8. class Tool
  9. {
  10.         //工具类传递的引用类型不确定
  11.         private Object obj;

  12.         //set
  13.         public void setObject(Object obj)
  14.         {
  15.                 this.obj = obj;
  16.         }

  17.         //get
  18.         public Object getObject()
  19.         {
  20.                 return obj;
  21.         }
  22. }

  23. class GenericDemo3
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 //操作Worker
  28.                 Tool t = new Tool();

  29.                 //t.setObject(new Student());//运行时候,发生类型转换异常
  30.                 t.setObject(new Worker());//需要程序员主观判断该传什么类

  31.                 //强制转换
  32.                 Worker w =(Worker)t.getObject();
  33.                
  34.         }
  35. }
复制代码

四、JDK1.5以后使用泛型来解决
  1. //泛型定义的工具类
  2. class Student
  3. {
  4. }

  5. class Worker
  6. {
  7. }

  8. //泛型定义在类上
  9. class Tool<T>
  10. {
  11.         //工具类传递的引用类型不确定
  12.         private T t;

  13.         //set
  14.         public void setObject(T t)
  15.         {
  16.                 this.t = t;
  17.         }

  18.         //get
  19.         public T getObject()
  20.         {
  21.                 return t;
  22.         }
  23. }

  24. class GenericDemo3
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 //操作Worker
  29.                 Tool<Worker> t = new Tool<Worker>();

  30.                 //t.setObject(new Student());//编译的时候,发生错误,由程序员解决,这样安全了
  31.                 t.setObject(new Worker());//不需要程序员主观判断该传什么类,客观的检测需要传什么引用类型
  32.                
  33.                 //不需要强制转换
  34.                 Worker w =t.getObject();
  35.                
  36.         }
  37. }
复制代码

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




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马