getConstructor()在java中没有参数

use*_*720 11 java getconstructor

我似乎无法getConstructor用于没有参数的构造函数.我一直在

java.lang.NoSuchMethodException: classname.<init>()
Run Code Online (Sandbox Code Playgroud)

这是代码

interface InfoInterface {
    String getClassName();
    String getMethodName();
    String getArgument();
}

class asa implements InfoInterface {
    @Override
    public String getClassName() {
        return ("jeden");
    }
    @Override
    public String getMethodName() {
        return ("metoda");
    }
    @Override
    public String getArgument() {
        return ("krzyk");
    }
}

class Jeden {
    Jeden() {
        System.out.println("konstruktor");
    }

    public void Metoda(String s) {
        System.out.println(s);
    }
}

class Start {
    public static void main(String[] argv) {
        if (argv.length == 0) {
            System.err.println("Uzycie programu: java Start nazwa_klasy nazwa_klasy2...");
            return;
        }

        try {
            for (int x = 0; x < argv.length; x++) {
                Class<?> c = Class.forName(argv[x]);
                InfoInterface d = (InfoInterface) c.newInstance();
                String klasa = d.getClassName();
                String metoda = d.getMethodName();
                String argument = d.getArgument();

                Class<?> o = Class.forName(klasa);
                // o.newInstance();

                Constructor<?> oCon = o.getConstructor();
                System.out.println("ASD");
                Class<?> p = (Class<?>) oCon.newInstance();
            }
        } catch (Exception e) {
            System.out.println(e);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

o.newInstance(); 打印"konstruktor"没有问题

fge*_*fge 23

当您阅读以下的javadoc.getConstructor()时问题很明显:

返回一个Constructor对象,该对象反映此Class对象所表示的类的指定公共构造函数.

强调我的.

在您的代码中,构造函数不公开!

例:

// Note: class is NOT public -- its default constructor won't be either
final class Test
{
    public static void main(final String... args)
        throws NoSuchMethodException
    {
        // throws NoSuchMethodException
        Test.class.getConstructor();
    }
}
Run Code Online (Sandbox Code Playgroud)

SO答案的强制性链接,也给出了JLS参考.特别要注意,默认构造函数具有与该类相同的访问修饰符.

  • 谢谢,似乎将构造函数改为公共工程 (2认同)