浏览 3016 次
锁定老帖子 主题:java反射之创建实例
精华帖 (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(); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |