大梦想家

5年开发工程师,2年实施经理,X年售前顾问,......
数据加载中……
Java反射Reflection--运行时生成instance
    想生成对象的实体,在反射动态机制中有两种方法,一个针对无变量的构造方法,一个针对带参数的构造方法,,如果想调用无参数的构造函数直接调用Class类中的newInstance(),而如果想调用有参数的构造函数,则需要调用Constructor类中newInstance()方法,首先准备一个Class[]作为Constructor的参数类型。然后调用该Class对象的getConstructor()方法获得一个专属的Constructor的对象,最后再准备一个Object[]作为Constructor对象昂的newInstance()方法的实参。
            在这里需要说明的是 只有两个类拥有newInstance()方法,分别是Class类和Constructor类,Class类中的newInstance()方法是不带参数的,而Constructro类中的newInstance()方法是带参数的需要提供必要的参数。

             下面提供的代码是构造Customer2类的三个构造函数
  1import java.lang.reflect.Constructor;
  2import java.lang.reflect.InvocationTargetException;
  3
  4/**
  5 * 在反射Reflection机制中,想生成一个类的实例有两种方法 一个是针对无参数的构造函数 ,另一个是针对有参数的构造函数
  6 * 
  7 */

  8public class ReflecTest3 {
  9
 10    /**
 11     * 反射的动态性质之一: 运行期动态生成Instance
 12     * 
 13     * @throws IllegalAccessException
 14     * @throws InstantiationException
 15     * @throws NoSuchMethodException
 16     * @throws InvocationTargetException
 17     * @throws SecurityException
 18     * @throws IllegalArgumentException
 19     */

 20    public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException {   
 21        Customer2 customer = new Customer2();   
 22        Class cls=customer.getClass();   
 23        // 获得Class所代表的对象的所有类型的构造函数Constructor的数组
 24        Constructor ctor[]=cls.getDeclaredConstructors();   
 25        for(int i=0;i<ctor.length;i++){
 26            // 获得对应的构造函数参数列表的Class类型的数组
 27            Class cx[]=ctor[i].getParameterTypes();   
 28            if(cx.length==0){   
 29                Object obj=cls.newInstance();   
 30                System.out.println(obj);   
 31            }
else if(cx.length==2){   
 32                Customer2 obj=(Customer2)cls.getConstructor(cx).newInstance(new Object[]{new Long(123),"hejianjie"});   
 33                System.out.println(obj);   
 34            }
else if(cx.length==3){   
 35                Customer2 obj=(Customer2)cls.getConstructor(cx).newInstance(new Object[]{new Long(133),"China-Boy",new Integer(21)});   
 36                System.out.println(obj);   
 37            }
   
 38        }
   
 39    }

 40}

 41
 42class Customer2 {
 43
 44    private Long id;
 45
 46    private String name;
 47
 48    private int age;
 49
 50    /**
 51     * 无参数的构造函数
 52     * 
 53     */

 54    public Customer2() {
 55
 56    }

 57
 58    /**
 59     * public修饰的有参数的构造函数,3个参数
 60     * 
 61     * @param id
 62     * @param name
 63     * @param age
 64     */

 65    public Customer2(Long id, String name, int age) {
 66        this.id = id;
 67        this.name = name;
 68        this.age = age;
 69    }

 70
 71    /**
 72     * public修饰的构造函数,2个参数
 73     * 
 74     * @param id
 75     * @param name
 76     */

 77    public Customer2(Long id, String name) {
 78        this.id = id;
 79        this.name = name;
 80        this.age = age;
 81    }

 82
 83    public int getAge() {
 84        return age;
 85    }

 86
 87    public void setAge(int age) {
 88        this.age = age;
 89    }

 90
 91    public Long getId() {
 92        return id;
 93    }

 94
 95    public void setId(Long id) {
 96        this.id = id;
 97    }

 98
 99    public String getName() {
100        return name;
101    }

102
103    public void setName(String name) {
104        this.name = name;
105    }

106
107    public String toString() {
108        return ("id==" + this.getId() + "  Name==" + this.getName() + " Age:" + this.getAge());
109    }

110
111}

112


客户虐我千百遍,我待客户如初恋!

posted on 2008-03-12 17:44 阿南 阅读(1244) 评论(0)  编辑  收藏 所属分类: Cool文存档


只有注册用户登录后才能发表评论。


网站导航: