代码示例:
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。
您需要跳过几个步骤才能做到这一点。首先,您需要使用Class.getConstructor()查找Constructor要调用的对象:
Constructor
返回一个构造函数对象,该对象反映此Class对象表示的类的指定公共构造函数。parameterTypes参数是Class对象的数组,这些Class对象按声明的顺序标识构造函数的形式参数类型。 如果此Class对象表示在非静态上下文中声明的内部类,则形式参数类型包括显式的封闭实例作为第一个参数。
然后您使用Constructor.newInstance():
如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数必须是封闭的实例