当我在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)PersonneAClassA的子类,而不是Algo的子类-因此,在解决问题1之后,您仍然会得到ClassCastException,因为PersonneA类型的对象不是Algo类型

10-07 20:37