考虑以下代码,
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());
}
}
它出什么问题了?我收到以下异常:
线程“主”中的异常java.lang.IllegalArgumentException:sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native方法)处的sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)处的参数数目错误。位于com.test.StartUp.main(StartUp.java:10)的java.lang.reflect.Constructor.newInstance(Constructor.java:513)的newInstance(DelegatingConstructorAccessorImpl.java:27)
您String[]
正在隐式转换Object[]
为空参数数组,而不是作为空数组的单个参数。试试这个:
Object arg = new String[0];
System.out.println(cd.newInstance(arg).toString());
要么
System.out.println(cd.newInstance(((Object)new String[0]).toString());
甚至避免编译器完全为您创建数组:
System.out.println(cd.newInstance(new Object[] { new String[0] }).toString());
基本上,这是可变参数处理和数组协方差的混合:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句