论坛首页 综合技术论坛

java反射之创建实例

浏览 2992 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-15   最后修改:2009-07-15

             为了做到使得程序具有更高的灵活性,可配置性,在开发中我们经常利用反射来创建一个类的实例,也就是获得一个类的一个对象!通常的做法是通过class.newInstance获得;但这种方法有一个不好的地方,那就是他只能创建无参构造器的对象,如果构造器有参数那它是无能为力的;解决的方法就是 先通过该类的Class获得带有参数的构造器,然后通过得到的构造器和传如的初始化参数来创建实例!以下是上述做法的一个demo:

 

1 实体类:

package reflect;

public class Duck {

	private Integer weight;
	private String name;
	
	public Duck(){
	  System.out.println("无参调用了");	
	}
	
	
   public Duck(String name){
	   name=name;
	   System.out.println("one参调用了");	
	}
   
   public Duck(String name,Integer weight){
	   name=name;
	   weight=weight;
	   System.out.println("Two参调用了");	
	}
}

 2 测试类

package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ExeTest {
	
	public static void main(String[] args) {
		Class  cls=Duck.class;


	   Class conargs[]={String.class,Integer.class};
	   
	   try {
		Constructor constructor=cls.getConstructor(conargs);


		String name="abc";
		Integer weight=new Integer(1056);
		Object initargs []={name,weight};
		constructor.newInstance(initargs);


		
	} catch (SecurityException e) {
		
		e.printStackTrace();
	} catch (NoSuchMethodException e) {
		e.printStackTrace();
	} catch (IllegalArgumentException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (InstantiationException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (InvocationTargetException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
	}

}
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics