Java通过反射了解集合泛型的本质(Class反射都是在运行时执行的)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/88052443

目录

 

理论

实例


理论

Class的反射都是运行时候来执行的,Java中集合的泛型是为了防止错误的输入,只在编译阶段有效,绕过编译就无效了。

下面演示用反射绕过编译器,

实例

程序结构:

运行截图如下:

源码:

MethodDemo.java

package my;

import java.lang.reflect.Method;
import java.util.ArrayList;

public class MethodDemo {
	
	public static void main(String[] args) {
		
		ArrayList list = new ArrayList();
		
		ArrayList<String> list1 = new ArrayList<String>();
		list1.add("hello");
		
		//list1.add(20);出错
		Class c1 = list.getClass();
		Class c2 = list1.getClass();
		
		System.out.println(c1 == c2);
		
		try {
			Method m = c2.getMethod("add", Object.class);
			m.invoke(list1, 1000);
		} 
		catch(Exception e) {
			
			e.printStackTrace();
		}
		
		System.out.println(list1.size());
		System.out.println(list1);
		
	}

}

这里c1 == c2结果返回true说明编译后结合的泛型是去泛型化的。

Java中机会的泛型,是为了防止错误的输入,只有在编译阶段有效

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/88052443