java5核心基础泛型(2):泛型在反射中的应用

2020-11-24 13:08

阅读:478

标签:blog   java   io   2014   问题   re   

如何通过反射获取指定参数类型的构造函数?

贴代码如下:

package highBasic.generic;
/**
 * 泛型入门
 */
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;

public class GenericTest {
	public static void main(String[] args) throws Exception
	{
		ArrayList collection =new ArrayList();
		//在list中添加元素
		collection.add(1);
		collection.add(1L);
		collection.add("abc");
		int i=(Integer)collection.get(0);
		//int i1=(Integer)collection.get(1);//----出现异常的语句		
		ArrayList collection2 =new ArrayList();
		//在list中添加元素
		//collection2.add(1);//
		//collection2.add(1L);//----编译器报错了,原由是这时候规定了只能存储string对象
		collection2.add("abc");
		String element=collection2.get(0);
		System.out.println(element);		
		//-----泛型在==反射==中的应用:通过反射获取指定类型的构造函数---------------1		           		                        Constructor constructor=String.class.getConstructor(StringBuffer.class);
		//通过泛型限定以后,就能够知道这个对象肯定是String类型的构造方法,如果不用泛型出现的结果
		//和上面定义集合对象的时候是类似的。
		String string2=constructor.newInstance(new StringBuffer("abc"));
		System.out.println(string2.charAt(0));
		/*
		 * 总结:那么到底在哪些地方可以用泛型?
		 * 我们可以查阅技术文档,看类型的定义,如果是类似于 Object这种形式就是可以用泛型的。
		 */
		//----泛型是在编译器阶段起作用的,解决了运行时候可能出现的异常。
		ArrayList collection3=new ArrayList();
		//如果想等说明collection2和collection3指向的是同一份字节码。
		System.out.println(collection2.getClass()==collection.getClass());
		//打印的结果是true
		//-------是否可以透过编译器给collection3中添加String对象呢?------------------------------------
		//collection3.add("abc");------报错
		Method method=collection3.getClass().getMethod("add",Object.class );
		method.invoke(collection3, "abc");
		System.out.println("透过编译器,将String对象传到Integer类型的集合对象中,输出结果:"+collection3.get(0));
		//输出:“透过编译器,将String对象传到Integer类型的集合对象中,输出结果:abc”
		//说明以上做法实现了。
		//那么问题是这样的做法有什么用途----------------------------?}}


上述1注释以下的code:利用反射机制获取了参数为StringBuffer类型的String类的构造函数 constructor,然后通过constructor的newInstance()方法传入StringBuffer类型的参数创建了String对象。最后将String对象 string2的引用指向它。

以上代码就成功的通过反射方式获取了指定参数类型的String类的构造函数。

 

java5核心基础泛型(2):泛型在反射中的应用,搜素材,soscw.com

java5核心基础泛型(2):泛型在反射中的应用

标签:blog   java   io   2014   问题   re   

原文地址:http://blog.csdn.net/hymking/article/details/24616577


评论


亲,登录后才可以留言!