Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
反射newinstance构造函数java参数数目错误_Java_Reflection_Constructor - Fatal编程技术网

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

反射newinstance构造函数java参数数目错误,java,reflection,constructor,Java,Reflection,Constructor,我正在学习Java中的反射,并尝试制作一个构造函数示例。但有一个问题:“错误的论点数量”。 通过谷歌和stackoverflow搜索,我找不到我目前面临的问题。 谁能帮我理解这个问题,非常感谢。 这是我的密码: public static void main(String[] args) { PrintClass f = new PrintClass(); Class cl = f.getClass(); Constructor<?> construc

我正在学习Java中的反射,并尝试制作一个构造函数示例。但有一个问题:“错误的论点数量”。 通过谷歌和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);
}

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

您正在无参数调用两个构造函数中的第一个。但是,如何确保数组中的第一个构造函数是没有参数的构造函数,而不是需要字符串的构造函数呢

你不能,因为上面说:

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

如果希望引用该类的无参数构造函数,则应调用

cl.getDeclaredConstructor();
cl.getDeclaredConstructor(String.class);
如果希望引用以字符串作为参数的构造函数,则应调用

cl.getDeclaredConstructor();
cl.getDeclaredConstructor(String.class);

哇,按照你的建议改变后,我的超级天才计划现在运行良好。谢谢你,你是个天才@佐罗,谢谢你,但我不是天才。只是一个经验丰富的开发人员,他知道大多数编程问题都可以通过阅读文档来解决:)