使用<class> ...使用反射的构造函数

时间:2016-04-17 03:36:12

标签: java reflection

我试图通过执行以下操作为具有反射的类使用构造函数:

MyClass.getConstructor(String.class, Array.newInstance(Car.class).getClass())

当类的构造函数如下所示:

public MyClass(String var1, Car... var2)

但是当我尝试运行该代码(并创建该类的新实例)的代码时,抛出了IllegalArgumentException。

1 个答案:

答案 0 :(得分:4)

Array.newInstance(Car.class).getClass()不是您获得Class类型Car[]的方法。正确的方法就是

Car[].class

Array.newInstance(Car.class)向Java询问0维数组,这是非法的。

如果Car未在此处硬编码,则需要使用长度为0的1维数组,而不是0维数组:

Array.newInstance(someClass, 0).getClass()

您还可以构造数组类型的名称并使用Class.forName,但这更具可读性,并且不需要长的else-if链来正确获取基元数组。