黑马程序员技术交流社区
标题:
自定义泛型的问题
[打印本页]
作者:
周玉龙
时间:
2012-7-19 00:09
标题:
自定义泛型的问题
老师以前讲过一个自定义泛型的例子:
class Tool2<Qq> {
private Qq qq;
public Qq getQq() {
return qq;
}
public void setQq(Qq qq) {
this.qq = qq;
}
}
但是我不明白它有什么作用。应该什么时候用到自定义泛型。还有就是泛型加在方法上跟这个方法不加泛型有什么不同。
作者:
尹善波
时间:
2012-7-19 01:24
/*
class Tool
{
private Worker w;
public void setWorker(Worker w)
{
this.w = w;
}
public Worker getWorker()
{
return w;
}
}
*/
class Worker{}
class Student{}
class Tool //早期定义Object来完成扩展。这么做虽然可以接受所有数据,让编译通过
//但是在运行期就不一定通过,而出现的异常通常用户是不容易解决的
{
private Object obj;
public void setObject(Object obj)
{
this.obj = obj;
}
public Object getObject()
{
return obj;
}
}
/*
现在定义泛型来完成扩展。
*/
class Utils<QQ>
{
private QQ q;
public void setObject(QQ q)
{
this.q = q;
}
public QQ getObject()
{
return q;
}
}
class GenericDemo3
{
public static void main(String[] args)
{
Utils<Worker> u = new Utils<Worker>();//泛型做法,不用强转动作
u.setObject(new Student());
Worker w = u.getObject();;
/*
Tool t = new Tool();//泛型前做法
t.setObject(new Student());
Worker w = (Worker)t.getObject();//必须将调用的Student强制转化为Worker
*/
}
}
/*
一般来说,当类中要操作的引用数据类型不确定时,这时候就要用泛型类了。
但是,泛型类定义的泛型在整个类中都有效,如果被类中的方法使用,那么泛型类的
对象明确要操作的具体类后,所有要操作的类型就已经固定了,这样就有些局限性了。
所以为了不同方法可以操作不同的类型,而且类型也不确定,那么最好把泛型定义在方法上。
记住另一点:静态方法不可以访问类上定义的泛型,可以定义在方法上。
优点: 可以解决安全性问题
泛型的出现可以将运行时出现的问题classCaseException异常,转移到编译时期,可以让设计者更好的为用户解决潜在问题,
避免了强制转化格式;
通过<>来定义要操作数据类型,<>用来接收类型,将集合中要存储的数据类型作为参数
传递到<>中即可。
*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2