`
deng_1987
  • 浏览: 6065 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ArrayList 中的泛型

    博客分类:
  • java
 
阅读更多
上回也在javaeye看了一篇文章,讲的是ArrayList泛型,不过不是普通的add,而是通过反射来加入对象。
先把代码贴出来
public class Test01 {
    public static void main(String[] args) throws Exception{        
        [color=red]ArrayList<Integer>[/color] arr1=new ArrayList<Integer>();
        [color=red]ArrayList<String>[/color] arr2=new ArrayList<String>();
        //下面打印出来true,证明泛型只是编译器级别的一个东西,加载到内存还是一样的
        System.out.println(arr1.getClass()==arr2.getClass());//一样把
        //那么可以用跳过编译器用反射直接加入不通类型的东西,测试打印出"dodo"字符串
        arr1.add(88);
        arr1.getClass().getMethod("add", Object.class).invoke(arr1, "dodo");
        System.out.println(arr1.get(1));//打印出来dodo
        System.out.println(arr1.get(0) instanceof Integer);//true
        System.out.println(arr1.get(1).toString());//报错(可能是在使用方法的时候,强制转换成Integer就报错了)
        //既然如此那么下面这个也应该能正确打印,但是报异常异常为: java.lang.ClassCastException
        arr2.add("why");
        arr2.getClass().getMethod("add", Object.class).invoke(arr2, Integer.valueOf(33));
        System.out.println(arr2.get(1));//就报错,可能是arr2.get(1)转换成string报错


        
        
    }

}

注意:红色的不能换掉
请大家发表下自己的看法。(额,这断代码,是我前几天看地,忘记URL了,抱歉)
arr1通过反射加入字符串的时候没事,但是提取出来,使用方法的时候就报错
arr2不能通过反射来加入整形
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics