【发布时间】:2010-01-19 23:20:39
【问题描述】:
代码示例:
public class Foo
{
public class Bar
{
public void printMesg(String body)
{
System.out.println(body);
}
}
public static void main(String[] args)
{
// Creating new instance of 'Bar' using Class.forname - how?
}
}
是否可以创建新的类 Bar 实例并给出其名称?我尝试使用:
Class c = Class.forName("Foo$Bar")
它找到了类,但是当我使用 c.newInstance() 时它会抛出 InstantiationException。
【问题讨论】:
-
Nitpick:这不是嵌套类,它是成员内部类。嵌套类是静态的,可以通过您刚刚尝试的机制轻松实例化。
-
InstantiationException的详细信息是什么? -
内部类是一种嵌套类(如果我没记错 JLS 术语的话)。
-
@Tom:口香糖,你是对的......刚刚检查了 JLS (java.sun.com/docs/books/jls/third_edition/html/…)......“内部类是一个嵌套类,它没有显式或隐式声明为静态的”。我的错。
标签: java reflection inner-classes