使用 Class.forName 实例化嵌套静态类

2022-08-31 14:41:16

我有一个喜欢: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

我的代码中有什么问题?

牛岛。


答案 1

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

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

这样,JRE 就可以使用点来确定包,而不必担心嵌套类。如果您查看生成的类文件(将是 .TopClass$InnerClass.class

(编辑:为原来的不准确道歉。Head被困在.NET土地上,直到我想到文件名...)


答案 2

尝试

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


推荐