黑马程序员——泛型的总结

来源:互联网 发布:安装mysql步骤 编辑:程序博客网 时间:2024/04/30 10:15
----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------

泛型的定义:

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

泛型的好处:

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型作用:

泛型是提供给java编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合会去除掉“类型”信息,使程序运行

 

效果和原始类型完全一样,由于编译器生成的字节码会去除掉泛型的类型信息,只要能跳过编译器就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,再

 

调用其add方法即可。

 

      ArrayList<Integer> arr = new ArrayList<Integer>();

 

      arr.add(2);

 

      arr.getClass().getMethod("add", Object.class).invoke(arr,"aine");

 

      System.out.println(arr);

 

      打印结果是:[2, aine]

 

参数化类型是不考虑继承的

 

      Vector<String> v = new Vector<Object>()  //错误

 

      Vector<Object> v = new Vector(String>()   //错误

 

       Vector v1 = new Vector<String>() //正确

 

       Vector<Object> v = v1    //正确

 

通配符

 

    使用?通配符可以引用其它各种参数化的类型,?通配符定义的变量主要用作引用,可以调用此参数化无关的方法,不能调用与参数化有关的方法。

 

    定义一个方法,此方法用于打印任意参数化类型的集合中的所有数据,如下:

 

   public static void print(Collection<?> coll){

 

    for(Object c:coll){

 

    System.out.println(c);

 

    }

 

    //coll.add("String");//错误,因为它不知道自己未来自己一定匹配的是String

 

    coll.size(); //正确,此方法与类型参数没关系

 

    coll = new HashSet<Date>(); //正确,通配符?指向Date正确的

 

    }

 

通配符的扩展

 

    1,限定通配符的上边界:

 

      正确:Vector<? extends Number> x = new Vector<Integer>();

 

      错误:Vector<? extends Number> x = new Vector<String>();

 

   2,限定通配符的下边界:

 

      正确: Vector<? super Integer> x = new Vector<Number>();

 

      错误:Vector<? super Integer> x = new Vector<Byte>();

 

 

自定义泛型方法

 

    访问修饰符  [static] <泛型标识>泛型标识方法名称([泛型标识 参数名称]){方法体};

 

如果类中的多个方法要使用泛型,则泛型就要使用类级别的(就是泛型定义在类上)

----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------