了解到的一些泛型知识,以及在此过程中遇到的问题

来源:互联网 发布:淘宝十年产品事pdf下载 编辑:程序博客网 时间:2024/06/05 16:17
package cn.sdut.generictype;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;/* * 泛型通配符 以及上限 下限 擦除 堆污染  */public class GenericDemo {public static void main(String[] args) {/* 堆污染: 当一个方法即使用泛型又使用可变参数,此时就容易导致堆污染 *  * 如 Arrays中asList方法 * 特别注意 使用此方法返回的List不能Add和remove */Integer[] a = {1,2,3,4};List<Integer> list4 = Arrays.asList(a);System.out.println(list4.toString());//list4.add(5);会运行报错//list4.remove(0);会运行报错//解决办法:两种// 第一种: List<Integer> list5 = new ArrayList<Integer>(list4);/* 第二种: List<Integer> list5 = new ArrayList<Integer>();         Collections.addAll(list5, a);         list5.add(11);//正常         System.out.println(list5);*///Collections.copy();这个方法也有坑  看一看http://www.2cto.com/kf/201701/586860.html//泛型的擦除/* * 1.泛型编译后就没了 * 2.当把带有泛型的集合付给不带泛型的集合,泛型就被擦除了 */List<Integer> list1 = new ArrayList<Integer>();list1.add(1);List list2 = new ArrayList();list2 = list1;List<String> list3 = new ArrayList<String>();list3 = list2;String str = list3.get(0);//此时报错   java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String}private static void dowork(List<?> list) {}//上限   此时 必须是 Number或子类private static void show(List<? extends Number> list) {}//下限   此时 必须是 Number或父类private static void show2(List<? super Number> list) {}}

阅读全文
1 0
原创粉丝点击