泛型

    技术2022-07-11  95

    〈泛型〉

    * * ---从jdk1.5开始, 引用泛型的概念--新增特性 * * 在集合中使用泛型: * 1.集合接口或者集合类在jdk5.0时都修改为带泛型的结构。 * 2.在实例化集合类时,可以指明具体的泛型类型 * 3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法、构造器、属性等)使用到类的泛型的位置。都指定为实例化时的泛型类型。 * 比如: add(E e) -->实例化以后:add(Integer integer) * 4.注意点:泛型的类型必须是类,不能用到基本数据类型。需要用到基本数据类型的就要用到对应的包装类。 * 5.如果实例化时,没有指明泛型的类型,默认类型为Object. 静态方法中不能使用类的泛型。 异常类不能声明为泛型。 泛型方法: 在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。 换句话说: 泛型方法所属的类是不是泛型类都没有关系。

    经典泛型方法:

    public <E> List<E> copyArrayList(E[] arr){ ArrayList<E> arrayList = new ArrayList<>(); for(E e : arr){ arrayList.add(e); } return arrayList; } //测试上述泛型方法 @Test public void test11(){ OrderTest1 orderTest1 = new OrderTest1(); Integer[] ar = new Integer[]{1,2,3,4,5}; List<Integer> integers = orderTest1.copyArrayList(ar); System.out.println(integers); } 1.泛型在继承方面的体现 * 类A是类B的父类。G<A> 和 G<B> 不具有父子类关系,二者是并列关系。--通过反证法求证 * * 补充:类A是类B的父类。 A<G> 和B<G> * * 反证法: * ArrayList<Object> arr1 = null; * ArrayList<String> arr2 = new ArrayList<String>(); * * 假设 arr1 = arr2; * 即arr1 --> 指向arr2的栈。 此时如果arr1调用add(E e) --存入一个Integer类型, * 即arr2的空间栈也要添加一个Integer, 因为arr2已经声明了是存放String类型的集合。 * 如果存入Integer,在编译过程就会报错不通过。 /** * 2.通配符的使用 * 通配符符号:? * * 类A是类B的父类,G<A>和G<B>是没有关系的,二者共同的父亲是:G<?> */ //List<?> 不能向内部添加数据,除了null以外 List<?> list1 = null; List<String> list = new ArrayList<>(); list.add("123"); list.add("234"); list1 = list; print(list1); list1.add(null);//能被获取到。
    Processed: 0.012, SQL: 10