面试题-java泛型擦除

来源:互联网 发布:淘宝达人开通 编辑:程序博客网 时间:2024/06/07 05:01

带不同泛型的ArrayList在编译后生成的Class是相同的!也就是说,泛型在编译生成字节码文件时会被”擦除”;不管ArrayList带什么泛型,在编译后都是ArrayList所对应的字节码文件。我们再来个更直观的:


题目:如何把String插入到ArrayList<Integer>中?

  ArrayList arrayList = new ArrayList();        arrayList.add(9527);        arrayList.add(9528);        Method method = arrayList.getClass().getMethod("add", Object.class);        method.invoke(arrayList, "hello,java");        for (int i = 0; i < arrayList.size(); i++) {            System.out.println( arrayList.get(i).toString());        }


其他泛型知识点:
   ? super Object,代表可以是Object子类的任意类型,不止一个。
   T ,是确定的某一个类型
      在泛型中extends 表示上限,super表示下限。比如: 
      ? extends Number 的上限是class java.lang.Number 
      ? super String 的下限是class java.lang.String