I have a nested static class like:
package a.b
public class TopClass {
public static class InnerClass {
}
}
I want to instantiate with Class.forName() but it raises a ClassNotFoundException .
Class.forName("a.b.TopClass"); // Works fine.
Class.forName("a.b.TopClass.InnerClass"); // raises exception
TopClass.InnerClass instance = new TopClass.InnerClass(); // works fine
What is wrong in my code?
Udo.
Nested classes use “$” as the separator:
That way the JRE can use dots to determine packages, without worrying about nested classes. You’ll spot this if you look at the generated class file, which will be
TopClass$InnerClass.class.(EDIT: Apologies for the original inaccuracy. Head was stuck in .NET land until I thought about the filenames…)