Consider the following code,
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());
}
}
What's wrong with it? I get the following Exception:
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.test.StartUp.main(StartUp.java:10)
Best Answer
Your
String[]
is being implicitly converted toObject[]
and taken as an empty array of arguments, instead of as a single argument which is an empty array. Try this:or
or even avoid the compiler having to create the array for you at all:
Basically this is a mixture of varargs handling and array covariance :(