黑马程序员技术交流社区

标题: 泛型 [打印本页]

作者: 大蓝鲸Java    时间: 2019-8-16 14:08
标题: 泛型
1.泛型
        如果不写泛型,集合也是可以创建的,只不过默认就是Object类型。
       
        弊端:当我们获取集合中元素的时候,无法使用子类的特有功能。
                  如果我们想用,只能向下转型。
                  但是在转型的时候,有可能会导致类型转换异常。


        好处:
                  规定了存储数据的类型。
                  当我们存储时,获取时就一定是泛型里面的数据类型。
                  我们可以统一类型,也可以使用子类特有的方法。

        注意:
                 泛型里面不能写基本数据类型。只能写引用数据类型。
                 如果我们要存一个整数,不能写int。只能写Integer。


2.泛型类
        格式
                定义一个类,在后面写一个尖括号即可。
                尖括号里面的是什么?是类型吗? 在定义的时候仅仅是一个变量而已。
                public class Gen<Q> {
                        Q q;
                }
                //此时Q仅仅是一个变量而已,没有任何的数据类型
                当创建Gen这个类的对象时就给Q赋值。
                Gen<Integer> g = new Gen<>();
                //此时给Q赋了个Integer的值。

3.泛型方法

        掌握的不是如何自己写一个泛型方法,而是如何调用。

        练习1.
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ddd");

        String[] integers = list.toArray(new String[10]);
        for (String integer : integers) {
            System.out.println(integer);
        }

        练习2:
                ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        Integer[] integers = list.toArray(new Integer[10]);
        for (Integer integer : integers) {
            System.out.println(integer);
        }

                //打印结果, 引用数据类型默认初始化值是null
                //注意:Integer是引用数据类型。


        练习3:
                  ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

       list.toArray(new int[10]);//报错
           //因为泛型里面只能写引用数据类型。


          练习4:
                ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

                //toArray底层做了一个判断
                //传递数组的长度跟集合长度进行了判断

                //规则:
                //谁长听谁的,不足null补齐。
        Integer[] integers = list.toArray(new Integer[0]);
        System.out.println(Arrays.toString(integers));//[1, 2, 3]
                 System.out.println(integers.length);//3

                 //书写规则:
                        //0   简单
                        //集合的长度   最为合理的值


4,泛型接口
        使用规则:
                1.实现类实现泛型接口的时候直接赋值。
                        public class Student implements Comparable<Student>

                2.实现类实现泛型接口的时候不赋值,把这个泛型接口引用下来。
                        在创建实现类对象的时候赋值。
                        public class Student<E> implements Comparable<E>




5.通配符
        1、泛型的通配符是什么?
                就是一个 问号 ?

        2、什么是上限,什么是下限?
                ? extends E
                ? super E







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