码迷,mamicode.com
首页 > 编程语言 > 详细

java中利用反射机制绕开编译器对泛型的类型限制

时间:2014-05-03 22:02:53      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:java   泛型   

首先看下面这个例子

	public static void main(String[] args) {
		ArrayList<Integer> al1 = new ArrayList<Integer>();
		al1.add(1);
		ArrayList<String> al2 = new ArrayList<String>();
		al2.add("hello");
		//int型链表和string型链表,结果为true
		System.out.println(al1.getClass()==al2.getClass());
	}

这说明编译器编译带参数说明的集合时会去掉类型的信息,转化为普通的链表,所以运行时,将不会受到泛型的影响。所以可以这样来绕开泛型的限制:

public static void main(String[] args) throws Exception {
		//定义一个包含int的链表
		ArrayList<Integer> al = new ArrayList<Integer>();
		al.add(1);
		al.add(2);
		//获取链表的add方法,注意这里是Object.class,如果写int.class会抛出NoSuchMethodException异常
		Method m = al.getClass().getMethod("add", Object.class);
		//调用反射中的add方法加入一个string类型的元素,因为add方法的实际参数是Object
		m.invoke(al, "hello");
		System.out.println(al.get(2));
	}


java中利用反射机制绕开编译器对泛型的类型限制,布布扣,bubuko.com

java中利用反射机制绕开编译器对泛型的类型限制

标签:java   泛型   

原文地址:http://blog.csdn.net/wanghao109/article/details/24916479

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!