一尘不染

是否可以使用Java Reflection创建嵌套类的实例?

java

代码示例:

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。


阅读 183

收藏
2020-09-08

共1个答案

一尘不染

您需要跳过几个步骤才能做到这一点。首先,您需要使用Class.getConstructor()查找Constructor要调用的对象:

返回一个构造函数对象,该对象反映此Class对象表示的类的指定公共构造函数。parameterTypes参数是Class对象的数组,这些Class对象按声明的顺序标识构造函数的形式参数类型。
如果此Class对象表示在非静态上下文中声明的内部类,则形式参数类型包括显式的封闭实例作为第一个参数。

然后您使用Constructor.newInstance()

如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数必须是封闭的实例

2020-09-08