Java反射——通过反射了解集合泛型的本质

通过反射了解集合泛型的本质

1
package com.imooc.reflect;
2
3
import java.lang.reflect.Method;
4
import java.util.ArrayList;
5
6
public class MethodDemo4 {
7
	public static void main(String[] args) {
8
		ArrayList list = new ArrayList();
9
10
		ArrayList<String> list1 = new ArrayList<String>();
11
		list1.add("hello");
12
		//list1.add(20);错误的
13
		Class c1 = list.getClass();
14
		Class c2 = list1.getClass();
15
		System.out.println(c1 == c2);
16
		//反射的操作都是编译之后的操作
17
18
		/*
19
		 * c1==c2结果返回true说明编译之后集合的泛型是去泛型化的
20
		 * Java中集合的泛型,是防止错误输入的,只在编译阶段有效,
21
		 * 绕过编译就无效了
22
		 * 验证:我们可以通过方法的反射来操作,绕过编译
23
		 */
24
		try {
25
			Method m = c2.getMethod("add", Object.class);
26
			m.invoke(list1, 20);//绕过编译操作就绕过了泛型
27
			System.out.println(list1.size());
28
			System.out.println(list1);
29
			/*for (String string : list1) {
30
				System.out.println(string);
31
			}*///现在不能这样遍历
32
		} catch (Exception e) {
33
		  e.printStackTrace();
34
		}
35
	}
36
37
}

参考资料

https://www.imooc.com/learn/199

  • © 2020 QSH
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信