【java】泛型的作用是在编译阶段防止错误输入,绕过编译就绕过泛型,可用反射验证

 1 package com.tn.collect;
 2 
 3 import java.lang.reflect.Method;
 4 import java.util.ArrayList;
 5 
 6 public class Fanxin {
 7     public static void main(String[] args){
 8         //泛型的作用是在编译阶段防止错误输入,绕过编译就绕过了泛型
 9         //反射都是绕过编译操作
10         ArrayList<String> str=new ArrayList<String>();
11         str.add("你好!");
12         ArrayList str2=new ArrayList();
13         
14         //结果是true说明类类型是一样的,编译后是去泛型化的
15         System.out.println(str.getClass()==str2.getClass());
16         System.out.println(str.getClass()==ArrayList.class);
17         
18         //用add方法的反射
19         try{
20             Method method=str.getClass().getMethod("add", new Class[]{Object.class});
21             method.invoke(str, new Object[]{100});
22         }catch(Exception e){
23             e.printStackTrace();
24         }
25         
26         System.out.println(str.size());
27         System.out.println(str);
28         
29         for(String s:str){
30             System.out.println(s);
31         }
32     }
33 }
View Code

运行结果:

true
true
2
[你好!, 100]
你好!
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at com.tn.collect.Fanxin.main(Fanxin.java:29)

posted @ 2017-03-22 22:08  xiongjiawei  阅读(892)  评论(0编辑  收藏  举报