Java--反射(五)从反射看泛型集合的本质

泛型的本质是为了在编译前防止错误参数的输入,在运行过程中无效

首先,由于反射机制是在编译后进行的,Class对象就相当于字节码文件,验证:

    ArrayList a1 = new ArrayList();
    a1.add("CSDN");
    ArrayList<String> a2 = new ArrayList();
    Class c1 = a1.getClass();
    Class c2 = a2.getClass();
    System.out.println(c1==c2);
    //true

而我们如果可以通过反射机制来在a1添加一个非String类型的对象,则可证明标题的观点。验证:

        Class c = a1.getClass();
        try {
            Method m = c.getMethod("add", Object.class);
            m.invoke(a,100);
            for (Object obj:a){
                System.out.println(obj.toString());
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //CSDN
        //100

拓展
我们可以引用反射机制来创建一个有着不同数据类型的ArrayList对象。


以上大部分内容来源于慕课网的”反射——Java高级开发必须懂的”课程,网址是http://www.imooc.com/learn/199,感谢Cedar老师的辛勤付出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值