黑马程序员技术交流社区

标题: 自定义泛型的问题 [打印本页]

作者: 周玉龙    时间: 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