
正文
【java】泛型的作用是在编译阶段防止错误输入,绕过编译就绕过泛型,可用反射验证
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
package com.tn.collect; import java.lang.reflect.Method;
import java.util.ArrayList; public class Fanxin {
public static void main(String[] args){
//泛型的作用是在编译阶段防止错误输入,绕过编译就绕过了泛型
//反射都是绕过编译操作
ArrayList<String> str=new ArrayList<String>();
str.add("你好!");
ArrayList str2=new ArrayList(); //结果是true说明类类型是一样的,编译后是去泛型化的
System.out.println(str.getClass()==str2.getClass());
System.out.println(str.getClass()==ArrayList.class); //用add方法的反射
try{
Method method=str.getClass().getMethod("add", new Class[]{Object.class});
method.invoke(str, new Object[]{100});
}catch(Exception e){
e.printStackTrace();
} System.out.println(str.size());
System.out.println(str); for(String s:str){
System.out.println(s);
}
}
}
运行结果:
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)






