如何自动实例化所有内部类

时间:2017-12-11 10:17:41

标签: java scope 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;
 }
}

我有以下类结构有时会有更多内部类,当我使用泛型类进行实例化时,只调用构造函数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>

1 个答案:

答案 0 :(得分:2)

你这里弄错了。您假设包含一个类意味着外部类还拥有内部类的一个对象。但这不一定是真的。内部类是关于作用域,而不是隐含拥有内部类的实例!

它不起作用:

  • 除非A类包含类B或C的字段,否则不需要(或方式)在创建A的实例时创建B类或C类的实例
  • 反之亦然:为了创建B的实例,你拥有来提供A的实例。当你想要创建一个C对象时,你拥有< / strong>提供A和B对象。

如果您直接使用new或反射和newInstance(),则无关紧要! (当然:它在可维护性和运行时性能成本方面很重要 - 只有在绝对需要的时候才能使用反射)

鉴于评论:如果您希望初始化内部类的字段,那么明确地执行此操作。像:

 public A() {
   myB = this.new B();
   myC = myB.new C();