java反射newinstance构造函数参数数量错误

zor*_*oro 1 java reflection constructor

我正在学习Java中的反射,并试图制作一个构造函数的例子。但有一个问题:“参数数量错误”。通过google和stackoverflow搜索,我找不到与我目前面临的相同的问题。谁能帮助我理解这个问题,非常感谢。这是我的代码:

    public static void main(String[] args) {
    PrintClass f = new PrintClass();
    Class cl = f.getClass();
    Constructor<?> constructor[] = cl.getDeclaredConstructors(); // cl.getDeclaredConstructors() also won't work...

    f.field1 = 3;
    PrintClass p1 = null;
    PrintClass p2 = null;

    try {
        p1 = (PrintClass) constructor[0].newInstance(); // constructor[0].newInstance((Object[])args) also won't work...
        p2 = (PrintClass) constructor[1].newInstance("this is not PrintClass-------");

        p1.print();
        p2.print();

    } catch (InstantiationException | IllegalAccessException
            | IllegalArgumentException | InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }
}

class PrintClass {
String s = "this is PrintClass...";
int field1;

public PrintClass(String s) {
    this.s = s;
}

public PrintClass() {
}

public void print() {
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

}

这就是错误

java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at reflection.MainClass.main(MainClass.java:18)
Run Code Online (Sandbox Code Playgroud)

再次非常感谢您帮助我理解这个问题。:)

JB *_*zet 5

您正在不带参数调用两个构造函数中的第一个。但是,如何确定数组中的第一个构造函数是不带参数的构造函数,而不是期望 String 的构造函数?

你不能,因为javadoc说:

返回的数组中的元素没有排序,也没有任何特定的顺序。

如果您想要引用该类的无参构造函数,您应该调用

cl.getDeclaredConstructor();
Run Code Online (Sandbox Code Playgroud)

如果您想要引用以 STing 作为参数的构造函数,您应该调用

cl.getDeclaredConstructor(String.class);
Run Code Online (Sandbox Code Playgroud)

  • @zoro 谢谢你,但我不是天才。只是一个经验丰富的开发人员,他知道大多数编程问题都可以通过阅读文档来解决:) (4认同)