考虑以下代码,
public class StartUp {
public StartUp(String[] test){}
public static void main(String[] args) throws Exception{
Constructor cd = StartUp.class.getConstructor(String[].class);
System.out.println(cd.newInstance(new String[]{}).toString());
}
}
它出什么问题了?我得到以下例外:
线程“main”中的异常java.lang.IllegalArgumentException:sun.reflect.DelegatingConstructorAccessorImpl的sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)中的参数数量错误.newInstance(DelegatingConstructorAccessorImpl.java:27)位于com.test.StartUp.main的java.lang.reflect.Constructor.newInstance(Constructor.java:513)中(StartUp.java:10)
2 回答
您的
String[]
被隐式转换为Object[]
并被视为一个空数组的参数,而不是作为一个空数组的单个参数 . 试试这个:要么
甚至避免编译器必须为你创建数组:
基本上这是varargs处理和数组协方差的混合:(
您可以使用dp4j verbose选项来回答您的问题,并获得您需要的正确反射代码: