如何自动实例化所有内部类
How to instantiate automatically all inner classes
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;
}
}
我有以下 class 结构,有时内部 classes,当我用泛型 class 实例化时,只调用构造函数 A 而对象 A 是实例化,有没有办法用各自的默认构造函数为所有内部 classes 实例化所有对象。
下面是我使用的通用 class。
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。无需明确地担心所有内部 classes 实例化一个一个,我可以一次性完成吗?!
UPDATE:我已经更新了 class 代码,
这是我将与 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>
你弄错了。您假设包含 class 意味着外部 class 也拥有内部 class 的一个对象。但这不一定是真的。拥有内部 classes 是关于 范围,而不是隐式 拥有 内部 classes![=13= 的实例]
这样不行:
- 除非 class A 包含 class B 或 C 的 字段 不需要(或方式) 在创建 A 的实例时创建 classes B 或 C 的实例
- 反之亦然:为了创建 B 的实例,您 必须 提供 A 的实例。当您想要创建 C 对象时,您有提供一个A和一个B对象。
而且你是直接使用new
还是反射加newInstance()
都没关系! (当然:它在可维护性和运行时性能成本方面很重要——只有在绝对需要时才应使用反射)
鉴于评论:如果您想要初始化内部 class 的 字段 ,那么您 必须 做那明确地。喜欢:
public A() {
myB = this.new B();
myC = myB.new C();
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;
}
}
我有以下 class 结构,有时内部 classes,当我用泛型 class 实例化时,只调用构造函数 A 而对象 A 是实例化,有没有办法用各自的默认构造函数为所有内部 classes 实例化所有对象。
下面是我使用的通用 class。
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。无需明确地担心所有内部 classes 实例化一个一个,我可以一次性完成吗?!
UPDATE:我已经更新了 class 代码, 这是我将与 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>
你弄错了。您假设包含 class 意味着外部 class 也拥有内部 class 的一个对象。但这不一定是真的。拥有内部 classes 是关于 范围,而不是隐式 拥有 内部 classes![=13= 的实例]
这样不行:
- 除非 class A 包含 class B 或 C 的 字段 不需要(或方式) 在创建 A 的实例时创建 classes B 或 C 的实例
- 反之亦然:为了创建 B 的实例,您 必须 提供 A 的实例。当您想要创建 C 对象时,您有提供一个A和一个B对象。
而且你是直接使用new
还是反射加newInstance()
都没关系! (当然:它在可维护性和运行时性能成本方面很重要——只有在绝对需要时才应使用反射)
鉴于评论:如果您想要初始化内部 class 的 字段 ,那么您 必须 做那明确地。喜欢:
public A() {
myB = this.new B();
myC = myB.new C();