import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
public class Demo1 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
ArrayList<String> list1=new ArrayList<String>();
list1.add("demo");
//因为指定了添加类型,所以在此写法会报错
//list1.add(100);
Class c=list.getClass();
Class c1=list1.getClass();
System.out.println(c==c1);
//返回结果为ture,说明编译之后集合的泛型是去泛型化的
}
}
}
接下来通过一个反射的例子来说明:java的中集合的泛型,是为了方式输入有误的,只在编译有效;编译后是集合的泛型去泛型化的
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
public class Demo2 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
ArrayList<String> list1=new ArrayList<String>();
list1.add("demo");
//因为指定了添加类型,所以在此写法会报错
//list1.add(100);
Class c=list.getClass();
Class c1=list1.getClass();
System.out.println(c==c1);
//返回结果为ture,说明编译之后集合的泛型是去泛型化的
/***
* java的中集合的泛型,是为了方式输入有误的,只在编译有效
* 可以通过反射来绕过编译
*/
}
}
try{
Method m=c1.getMethod("add",Object.class);
m.invoke(list1, 100); //绕过了泛型
System.out.println(list1.size());
System.out.println(list1);
}catch (Exception e) {
// TODO: handle exception
}
}
}
经过运行demo2你会发现输出[“demo”,100],由此我们得出结论:Java中集合的泛型,在编译时期有效,在运行时就无效.