当我在main中以args给出Class的名称时,一个参数是:
“ myPackage.Algo.PersonneA”。我有一个例外,我不知道为什么?
线程“主”中的异常java.lang.ClassNotFoundException:
myPackage.Algo.PersonneA
这是我的主要:
public static void main(String[] args) {
Algo rf = (Algo) Class.forName(args[0]).newInstance();
}
这是我想主讲的一门课。
package myPackage;
public class Algo {
public static class PersonneA extends ClassA {
public Algorithm create(int r) {
return new AlgorithmDist(new DistributedDocument(), r);
}
}
public static class PersonneB extends ClassA {
public Algorithm create(int r) {
return new AlgorithmSimul(new SimulationDocument(), r);
}
}
}
最佳答案
两件事情:
(1)对于内部类,您需要将字符串传递给forName()
:
"myPackage.Algo$PersonneA"
^
instead of .
内部类与封闭类用
$
分隔,而不用.
分隔。因此,将
main()
的参数更改为上面的字符串,而不是您提供的参数。(2)
PersonneA
是ClassA
的子类,而不是Algo
的子类-因此,在解决问题1之后,您仍然会得到ClassCastException
,因为PersonneA
类型的对象不是Algo
类型