我试图通过执行以下操作为具有反射的类使用构造函数:
MyClass.getConstructor(String.class, Array.newInstance(Car.class).getClass())
当类的构造函数如下所示:
public MyClass(String var1, Car... var2)
但是当我尝试运行该代码(并创建该类的新实例)的代码时,抛出了IllegalArgumentException。
答案 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链来正确获取基元数组。