public class Circle{
private String c;
private String r; public Circle(String[] args){
this.c = args[0];
this.r = args[1];
} public static void main(String[] args){
Class c = Circle.class;
Circle circle = c.getConstructor(new Class[]{String[].class}).newInstance(new String[]{"44","55"});
System.out.println(circle); }
}
出现异常,不能生成对象,说:wrong number 0f arguments
这是什么原因啊,请高手解答,是反射机制不能用原始的数组吗?
用ArrayList是可以的
改成
Object []obj = new Object[1];
obj[0]= new new String[]{"44","55"};
Circle circle = c.getConstructor(new Class[]{String[].class}).newInstance(obj);
你这样试试,应该可以的。
Class c = Circle.class;
Constructor constructor = c.getConstructor( new Class[] { String[].class } );
// 创建一个字符串数组, 这个数组,只是作为一个参数啊
String[] array = new String[] { "44", "55" };// 还得创建一个数组,作为参数列表, array 只是参数列表中的第一个参数啊
Object[] args = new Object[] { array };
// newInstance 的参数是一个 Object[], 数组各元素就是各参数
Object theCircle = constructor.newInstance(args);Circle circle = (Circle)theCircle;System.out.println(circle);
构造函数的参数是一个参数,参数的类型是String数组,
而newinstance(object...argus)是一个可以传递一个或者多个参数的方法
当你用new String[]{"33","44"}的时候方法认为你传递的是两个参数一个是33,一个是44,而你
想传递的是一个对象String数组,所以个数出现了误会。
Class c = Circle.class;
Circle circle = c.getConstructor(new Class[]{String[].class}).newInstance(new Object[]{"44","55"});
//你在调用newInstance方法,其参数的类型是Object数组,而非String数组。
System.out.println(circle); }
jdk1.5后,好像已经支持数组传值用参数的形式也可以啊