如何在不知道参数的情况下使用反射调用java构造函数(使用null调用)

时间:2014-11-17 12:18:44

标签: java reflection

我需要使用反射来调用构造函数来实例化一个类来生成多个对象。

以下是我目前正在做的创建这些对象的内容:

for(int i = 0;i < num_objects;i++)
{
    User A = new User(null, null, null);            
    loaded_data.add(A);             
}

但是,我想假设我不知道User实际上是什么构造函数,因此希望使用反射来使用null参数创建x个对象,以便稍后可以使用它们的setter填充它们。

注意loaded_data是User类型的对象数组。

我可以调用Setter,所以稍后定义对象没问题,如果我们假设我们不知道构造函数需要多少参数,我只是不确定如何使用构造函数创建这些对象。

1 个答案:

答案 0 :(得分:0)

嗯,这是一个用反射创建String的简单示例。但是,它会抛出一个NullPointerException,因为执行new String(null)时会发生这种情况。

 Constructor cons = String.class.getConstructors ()[1]; // I chose the 2nd constructor
                                                        // arbitrarily
 Class[] params = cons.getParameterTypes ();
 System.out.println ("Number of params: " + params.length);
 Object[] cargs = new Object[params.length]; // array of nulls to pass to the 
                                             // constructor
 try {
   Object obj = cons.newInstance (cargs);
 } catch (IllegalArgumentException e1) {
   System.out.println (e1);
   e1.printStackTrace();
 } catch (InstantiationException e1) {
   System.out.println (e1);
   e1.printStackTrace();
 } catch (IllegalAccessException e1) {
   System.out.println (e1);
   e1.printStackTrace();
 } catch (InvocationTargetException e1) {
   System.out.println (e1);
   e1.printStackTrace();
 }

这只有在所有构造函数的参数都是引用类型且构造函数可以将null作为输入处理时才有效。也就是说,如果要创建一个具有空值的实例,那么使用无参数构造函数是否更有意义,并使用class.newInstance()创建实例?