集合泛型本质
- java中集合的泛型是防止错误输入的,只是在编译阶段有效,绕过编译就无效了
- 通常来说一个集合存的都是同一种类型,所以相当于一种编译预检,都遵循这个约定
- 两个同类型的集合,泛型不同,通过反射获取类对象可以发现是同一个类对象,说明反射是去编译之后的操作,如一下代码结果所示
ArrayList arrayList = new ArrayList();
ArrayList<String> arrayList1 = new ArrayList<>();
Class<? extends ArrayList> aClass = arrayList.getClass();
Class<? extends ArrayList> aClass1 = arrayList1.getClass();
System.out.println(aClass==aClass1); // true
如何向集合arrayList1中加入一个20呢
采用反射,绕过泛型编译检查
代码如下
arrayList1.add("hello world");
Method add = aClass1.getMethod("add", Object.class);
Object invoke = add.invoke(arrayList1, new Integer(20));
add.invoke(arrayList1, 30);
System.out.println(invoke);
for (Object o : arrayList1) {
if (o instanceof String) {
System.out.println("String类型:" + o);
}
if (o instanceof Integer) {
System.out.println("Integer类型:" + o);
}
}