public class A{
private String A1;
private B b;
public class B{
private String B1;
private C c;
private D d;
public class C{
private String C1;
}
public class D{
private String D1;
}
}
我有以下类结构,有时有更多内部类,当我实例化泛型类时,仅调用构造函数 A 并实例化对象 A,有没有办法实例化所有内部类的所有对象有各自的默认构造函数。
我正在使用的通用类如下。
public class GenericClass<O> {
private Class<O> clazz;
public GenericClass(Class<O> clazz){
this.clazz = clazz;
}
public O get() throws InstantiationException, IllegalAccessException{
return (O) clazz.newInstance();
}
}
当我仅执行clazzO.newInstance()
时,B和C将指向null。无需明确担心所有内部类实例化一一,我可以一次性完成吗?!
更新:我已经更新了类代码, 这是我将通过 Jackson 获得的示例 XML。
<?xml version="1.0" encoding="UTF-8"?>
<A>
<A1>Outer Class A</A1>
<B>
<B1>Class B</B1>
<C>
<C1>Class C</C1>
</C>
<D>
<D1>Class D</D1>
</D>
</B>
</A>
最佳答案
你在这里搞错了。您假设封闭一个类意味着外部类也拥有内部类的一个对象。但这不一定是真的。拥有内部类是关于范围,而不是隐式拥有内部类的实例!
这样不行:
- 除非类 A 包含类 B 或 C 的字段,否则在创建 A 的实例时不需要(或没有办法)创建类 B 或 C 的实例
- 反之亦然:为了创建 B 的实例,您必须提供 A 的实例。而当您想要创建 C 对象时,您必须 提供 A 和 B 对象。
无论您是直接使用 new
还是反射和 newInstance()
都没有关系! (当然:这在可维护性和运行时性能成本方面很重要 - 只有在绝对需要时才应使用反射)
鉴于评论:如果您希望初始化内部类的字段,那么您必须明确地执行此操作。喜欢:
public A() {
myB = this.new B();
myC = myB.new C();
关于java - 如何自动实例化所有内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47750646/