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

标签 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>

最佳答案

你在这里搞错了。您假设封闭一个类意味着外部类也拥有内部类的一个对象。但这不一定是真的。拥有内部类是关于范围,而不是隐式拥有内部类的实例!

这样不行:

  • 除非类 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/

相关文章:

java - LibGDX FitViewport 在构造时不适合自身,但在调整大小时适合

c++ - 在 C++ 中使用 ios_base 时范围解析运算符的目的是什么

c++ - 尝试解决 "out of scope"编译错误 : CodeBlocks, Linux Fedora

lambda - 方法内与其参数引用之一相同的引用所指的参数正确吗?

java - 适当的 Proguard 配置以保持静态内部类

java - 函数对象内部类中的变量/对象会怎样?

python - 为了良好的风格,我应该在 Python 中在方法之前定义内部类,反之亦然吗?

Java类实例化说明

java - 读取和写入文本文件时的错误

java - android fragment 可以在api 3.0上使用,但不能在2.2上使用