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

sse*_*ano 53 java static

nested static class喜欢:

package a.b
public class TopClass {

    public static class InnerClass {
    }
}
Run Code Online (Sandbox Code Playgroud)

我想实例化,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
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?

你做.

Jon*_*eet 87

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

Class.forName("a.b.TopClass$InnerClass");
Run Code Online (Sandbox Code Playgroud)

这样,JRE可以使用点来确定包,而不必担心嵌套类.如果你看一下生成的类文件,你会发现这个TopClass$InnerClass.class.

(编辑:对原始的不准确性表示抱歉.头部被困在.NET中,直到我想到文件名......)


Sil*_*rom 19

尝试

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


Art*_*cis 8

内部类通过美元符号访问:

Class.forName("a.b.TopClass"); 
Class.forName("a.b.TopClass$InnerClass"); 
Run Code Online (Sandbox Code Playgroud)