当我将args中的Class命名为main时,参数为: “myPackage.Algo.PersonneA”。我有一个例外,我不知道为什么?
线程“main”中的异常java.lang.ClassNotFoundException: myPackage.Algo.PersonneA
这是我的主要内容:
public static void main(String[] args) { Algo rf = (Algo) Class.forName(args[0]).newInstance(); }
这是一个我想要在主要时间实现instanciate的课程。
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); } } }
答案 0 :(得分:5)
两件事:
(1)对于内部类,您需要传递给forName()
字符串:
"myPackage.Algo$PersonneA"
^
instead of .
内部类与$
而不是.
的封闭类分开。
因此,将参数更改为main()
到上面的字符串而不是您提供的字符串。
(2)PersonneA
是ClassA
的子类,而不是Algo
的子类 - 因此在修复问题1后,您仍会得到ClassCastException
,因为类型为{的对象{1}}不属于PersonneA
答案 1 :(得分:1)
你的主要应该是这样的:
public static void main(String[] args) {
Algo rf = (Algo) Class.forName(args[0]).newInstance();
}
您写道:static public void main(String[] args)
这是错误的语法:)