通过反射在 Java 中实例化嵌套类
无法使用标准反射方法实例化所提供的 Java 代码中定义的内部类是Java 开发人员面临的常见陷阱。当尝试直接使用 Class.newInstance() 创建实例时,由于存在表示封闭类实例的隐藏参数而出现问题。
要成功实例化内部类,有必要使用Class.getDeclaredConstructor() 访问构造函数并提供封闭类的实例作为参数。下面的代码片段说明了这种方法:
// Exceptions omitted for brevity
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);
或者,如果嵌套类不依赖于封闭实例,更直接的解决方案是将其声明为静态嵌套类:
public class Mother {
public static class Child {
public void doStuff() {
// ...
}
}
}
通过利用这些方法,开发人员可以使用 Java 中的反射有效地实例化依赖和独立内部类。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3