给main一个参数

时间:2012-03-23 10:18:51

标签: java arguments

当我将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);
        }
    }
}

2 个答案:

答案 0 :(得分:5)

两件事:

(1)对于内部类,您需要传递给forName()字符串:

"myPackage.Algo$PersonneA"
               ^
           instead of .

内部类与$而不是.的封闭类分开。
因此,将参数更改为main()到上面的字符串而不是您提供的字符串。

(2)PersonneAClassA的子类,而不是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)这是错误的语法:)