package newFeatures8;
class Worker {
}
class Student {
}
/*如果这么写的话 就只能获取Worker对象
如果要获取n多种不同对象或者说是任意对象呢
这时可以将Worker类型改为Object 类型
class Tool
{
private Worker w;
public void setWorker(Worker w)
{
this.w = w;
}
public Worker getWorker()
{
return w;
}
}
*/
// 泛型前做法。//具有扩展性,但需要强转有安全隐患
class Tool {
private Object obj;
public void setObject(Object obj) {
this.obj = obj;
}
public Object getObject() {
return obj;
}
}
// 泛型后做法
/* 泛型类
* 什么时候定义泛型类? 当类中要操作的引用数据类型不确定的时候, 早期定义Object来完成扩展。 现在定义泛型来完成扩展。
*/
class Utils<QQ> {//泛型工具类 //QQ为自定义的泛型参数,类似于T,E
private QQ q;
public void setObject(QQ q) {
this.q = q;
}
public QQ getObject() {
return q;
}
}
class GenericDemo {
public static void main(String[] args) {
Utils<Worker> u = new Utils<>();
// u.setObject(new Student30());//如果传递的是非Worker类型编译时就报错
u.setObject(new Worker());
Worker w = u.getObject();
/*一不小心传了个student对象进去,强制转换时就容易出现安全隐患
* Tool t = new Tool(); t.setObject(new Student()); Worker w =
* (Worker)t.getObject();
*/
Utils<Student> stu = new Utils<>();
Student s=stu.getObject();
}
}