集合泛型的本质

来源:互联网 发布:游戏试玩网站源码 编辑:程序博客网 时间:2024/06/07 02:45

通过反射机制来认识:

  1. java中集合的泛型是防止错误输入的,只在编译阶段有效,绕过编译就无效了
  2. 验证:通过方法的反射来操作,绕过编译
    结论:

编译之后集合的泛型是去泛型化的(类型擦除)

代码:

 public static void main(String[] args){        ArrayList list = new ArrayList();        ArrayList<String> list1 = new ArrayList<String>();        Class c1 = list.getClass();        Class c2 = list1.getClass();        list1.add("hello");        System.out.println(c1==c2);        //反射的操作都是编译之后的操作        //c1==c2为true,说明编译之后集合的泛型是去泛型化的(类型擦除)        //验证过程        try {            Method m = c2.getMethod("add",Object.class);            m.invoke(list1,100); //绕过编译就绕过了泛型            System.out.println(list1.size());//            for(String string:list1){//                System.out.println(string);//            }//现在不能这样遍历,会有类型转换异常        } catch (Exception e) {            e.printStackTrace();        }    }
原创粉丝点击