经典泛型方法:
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);//能被获取到。