我有一个nested static class像:

package a.b
public class TopClass {

    public static class InnerClass {
    }
}

我想用Class.forName()实例化,但是它引发了ClassNotFoundException
Class.forName("a.b.TopClass"); // Works fine.
Class.forName("a.b.TopClass.InnerClass"); // raises exception

TopClass.InnerClass instance = new TopClass.InnerClass(); // works fine

我的代码有什么问题?

你做。

最佳答案

嵌套类使用“$”作为分隔符:

Class.forName("a.b.TopClass$InnerClass");

这样,JRE可以使用点来确定包,而不必担心嵌套类。如果查看生成的类文件,它将发现这个文件,该文件将为TopClass$InnerClass.class

(编辑:为原始的不准确性而道歉。在我考虑文件名之前,头卡在了.NET Realm 中。)

10-02 08:12