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参考.特别要注意,默认构造函数具有与该类相同的访问修饰符.
| 归档时间: |
|
| 查看次数: |
18471 次 |
| 最近记录: |