在 Java 中使用反射实例化内部类
问题:
尝试实例化内部类使用反射的类,如:
<code class="java">Class<?> clazz = Class.forName("com.mycompany.Mother$Child"); Child c = clazz.newInstance();</code>
会产生InstantiationException。
答案:
实例化内部类时,需要一个封闭类的实例。为此,请使用 Class.getDeclaredConstructor() 获取构造函数并提供封闭类的实例作为参数。
示例:
<code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother"); Object enclosingInstance = enclosingClass.newInstance(); Class<?> innerClass = Class.forName("com.mycompany.Mother$Child"); Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass); Object innerInstance = ctor.newInstance(enclosingInstance);</code>
替代解决方案:
如果内部类不需要访问封闭实例,请考虑使用静态嵌套类代替:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
以上是Java中如何使用反射实例化内部类?的详细内容。更多信息请关注PHP中文网其他相关文章!