黑马程序员技术交流社区

标题: 关于泛型的一点小问题 希望得到帮助 谢谢了!!!!!! [打印本页]

作者: 刘茂林    时间: 2013-5-15 12:18
标题: 关于泛型的一点小问题 希望得到帮助 谢谢了!!!!!!
本帖最后由 刘茂林 于 2013-5-15 17:01 编辑
  1. public class GenericDemo2
  2. {
  3.     public static void main(String[] arg)
  4.     {
  5.         /*
  6.          * Tool t = new Tool(); t.setWorker(new Worker()); t.getWorker();
  7.          */
  8.         Utils<Worker> u = new Utils<Worker>();
  9.         u.setObject(new Worker());
  10.         Worker w = u.getObject();

  11.     }

  12. }

  13. class Worker
  14. {

  15. }
  16. class Student1
  17. {
  18.    
  19. }



  20. class Utils<QQ> // 这里就是泛型类
  21. {
  22.     private QQ q;

  23.     public void setObject(QQ q)
  24.     {
  25.         this.q = q;
  26.     }

  27.     public QQ getObject()
  28.     {
  29.         return q;
  30.     }

  31. }
复制代码
看视频 说这个例子说的是泛型类  ,可是不太明白有什么作用 , 希望 楼下的能 给点东西   。比如 实现什么能看出来 这个例子的作用的 代码谢谢了


作者: 小臣    时间: 2013-5-15 12:39
简单的说就是你设置了泛型就像给他设置了权限。其他不同类型不可以用。比如泛型是<String>那你只能用String字符串。其他什么int boolean都不能使用。
作者: 张洪慊    时间: 2013-5-15 12:52
  1. class Utils<QQ>
  2. {
  3.     private QQ q;

  4.     public void setObject(QQ q)
  5.     {
  6.         this.q = q;
  7.     }

  8.     public QQ getObject()
  9.     {
  10.         return q;
  11.     }

  12. }

  13. /*
  14. 针对楼上说法举个例子:
  15. Util<String> util=new Util<String>();
  16. util.setObject("heixiu");
  17. 那么在编译时,会将类中的QQ替换为String
  18. 这样做有什么好处?
  19. 把运行时期可能出现的安全隐患提升到了编译时期
  20. //util.setObject(1);//编译无法通过->Integer类型无法转换为String类型
  21. 由此可见限定了类型使用.
  22. */
复制代码

作者: 刘茂林    时间: 2013-5-15 14:38
张洪慊 发表于 2013-5-15 12:52

能不能 打印点什么东西 好让人理解的?
作者: jingzhouheima    时间: 2013-5-15 14:41
public class GenericDemo2
{
    public static void main(String[] arg)
    {
        /*
         * Tool t = new Tool();
         *  t.setWorker(new Worker());
         *  t.getWorker();
         */
        Utils<Worker> u = new Utils<Worker>();//在这里实例一个泛型类
        u.setObject(new Worker());
        Worker w = u.getObject();

    }

}

class Worker
{

}
class Student1
{
   
}



class Utils<QQ> // 这里就是泛型类,其实泛型类相当于封装的感觉,因为定义的泛型,其他类型的引用就必须遵照定义好的泛型类
{
    private QQ q;

    public void setObject(QQ q)//写入,实际上这里的修饰符可以用private更好一点

    {
        this.q = q;
    }

    public QQ getObject()//读取,实际上这里的修饰符可以用private更好一点
    {
        return q;
    }

}
作者: 刘茂林    时间: 2013-5-15 15:01
jingzhouheima 发表于 2013-5-15 14:41
public class GenericDemo2
{
    public static void main(String[] arg)

谢谢  能不能打印点什么东西 好让我理解的啊。 做点什么工作
作者: xuemeng    时间: 2013-5-15 15:58
泛型是jdk1.5以后出现的新特性, 用于解决安全问题的, 是一个安全机制, 提高了程序的安全性;
泛型将运行期遇到的问题转移到了编译期, 是编译期状态, jvm根本就不知道有泛型
省去了类型强转的麻烦;
泛型类的出现优化了程序设计;
大多数情况下, 我们对集合不会添加多种类型的元素, 所以我们希望可以像数组一样, 在定义集合时, 指定可以装载的元素类型, 这时我们就要用到泛型
java中用到泛型最多的地方就是集合;
集合类都有至少一个类型变量,
当在创建集合对象时, 就可以给集合的类型变量赋值, 如ArrayList<String> al = new ArrayList<String>( );
一旦给集合的类型变量赋值, 那么集合内部所有使用类型变量的地方都要使用赋值的变量, 例如给类型变量赋值String, 那么集合所有使用类型变量的地方都会被指定的值替换

示例代码:
public class Demo {
        public static void main(String[] arg) {
                // 因为定义了泛型,我这里创建对象时指定泛型的具体的类型变量为String类型
                Utils<String> u = new Utils<String>();
                u.fun("a");// 调用fun方法参数为String类型, 为什么呢?因为我指定了泛型的类型变量为String
                                        // 那么, 这个时候只要是用到QQ 类型的地方,都必须是String类型
                // u.fun(5);//这个代码就会报错, 因为我泛型指定的 是String类型,
                // fun方法的参数列表中的形参因为是泛型, 那么必须得传递String类型的参数, 这里传递5,不是String类型的,那么就会报错
        }
}

class Utils<QQ> // 这里的QQ.你可以理解为Object
{
        public void fun(QQ q) {
                System.out.println(q);
        }
}

作者: 刘茂林    时间: 2013-5-15 16:51
xuemeng 发表于 2013-5-15 15:58
泛型是jdk1.5以后出现的新特性, 用于解决安全问题的, 是一个安全机制, 提高了程序的安全性;
泛型将运行期遇 ...

好的  多谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2