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是可以的

解决方案 »

  1.   

    Circle circle = c.getConstructor(new Class[]{String[].class}).newInstance(new String[]{"44","55"});
    改成
    Object []obj = new Object[1];
    obj[0]= new new String[]{"44","55"};
    Circle circle = c.getConstructor(new Class[]{String[].class}).newInstance(obj);
    你这样试试,应该可以的。
      

  2.   

    感谢rumlee了,但我想知道是为什么?有高手知道吗
      

  3.   


    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);
      

  4.   

    其实是搞混了一点:
    构造函数的参数是一个参数,参数的类型是String数组,
    而newinstance(object...argus)是一个可以传递一个或者多个参数的方法
    当你用new String[]{"33","44"}的时候方法认为你传递的是两个参数一个是33,一个是44,而你
    想传递的是一个对象String数组,所以个数出现了误会。
      

  5.   

    难道String 数组不能作为Object数组使用么?
      

  6.   

    public static void main(String[] args){
           Class c = Circle.class;
           Circle circle = c.getConstructor(new Class[]{String[].class}).newInstance(new Object[]{"44","55"});
           //你在调用newInstance方法,其参数的类型是Object数组,而非String数组。
           System.out.println(circle);    }
      

  7.   

    可以通过constructor 类的getGenericParameterTypes()方法获取该构造函数的参数的类型,可以查查你的jdk。
      

  8.   

    可以通过constructor 类的getGenericParameterTypes()方法获取该构造函数的参数的类型,可以查查你的jdk。
      

  9.   


    jdk1.5后,好像已经支持数组传值用参数的形式也可以啊
      

  10.   

    是可以,在这里,LZ 的构造函数是一个String数组,用newinstance创建对象的时候,它的参数是可变的,若用数组,就让虚拟机以为你的参数是“33”,“44”,它找不到带有两个参数的构造函数,出错了。
      

  11.   

    不好意思了啊,有事晚上了!真是受教了,感谢各位了,特别ZiSheng!
      

  12.   

    用constructs+newinstance(object...argus)