——- 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();
}
}
以后设计到操作的引用类型不确定的时候就把泛型定义在类上!