java泛型的作用是在编译阶段防止错误输入,绕过编译就绕过泛型,可用反射验证
Posted xiongjiawei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
运行结果:
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泛型的作用是在编译阶段防止错误输入,绕过编译就绕过泛型,可用反射验证的主要内容,如果未能解决你的问题,请参考以下文章