码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-03-22 23:06:19      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:ring   反射   ast   close   void   验证   try   log   .class   

技术分享
 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)

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

标签:ring   反射   ast   close   void   验证   try   log   .class   

原文地址:http://www.cnblogs.com/xiongjiawei/p/6602380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!