6-1 Java通过反射了解集合泛型的本质

来源:互联网 发布:番茄时钟 mac 编辑:程序博客网 时间:2024/06/10 02:33
  • 通过Class,Method来认识泛型的本质
package com.imooc.reflect;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;/** * Created by Administrator on 2017/8/20 0020. */public class MethodDemo4 {    public static void main(String[] args) {        ArrayList list = new ArrayList();        ArrayList<String> list1 = new ArrayList<>();        list1.add("hello");//        list1.add(20);错误的        Class c1 = list.getClass();        Class c2 = list1.getClass();        System.out.println(c1 == c2);// true        //反射的操作都是编译之后的操作        /**         * c1==c2结果返回true说明编译之后集合的泛型是去泛型化的         * Java中集合的泛型,是防止错误输入的,只在编译阶段有效,         * 绕过编译就无效了         * 验证:我们可以通过方法的反射来操作,绕过编译         */        try {            Method m = c2.getDeclaredMethod("add",Object.class);            m.invoke(list1,30); //绕过了编译操作就绕过了泛型            System.out.println(list1.size());            System.out.println(list1);        } catch (NoSuchMethodException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        }    }}
原创粉丝点击