我需要使用反射来调用构造函数来实例化一个类来生成多个对象。
以下是我目前正在做的创建这些对象的内容:
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,所以稍后定义对象没问题,如果我们假设我们不知道构造函数需要多少参数,我只是不确定如何使用构造函数创建这些对象。
答案 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()
创建实例?