首页  >  文章  >  Java  >  Java中如何使用反射实例化内部类?

Java中如何使用反射实例化内部类?

Patricia Arquette
Patricia Arquette原创
2024-10-28 22:27:30186浏览

How to Instantiate Inner Classes using Reflection in Java?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn