为什么在构造函数中声明和实例化temp对象而不是真实对象?

Kur*_*ier 0 java constructor objectinstantiation

请原谅我,如果这有答案的话; 我真的不知道要搜索什么...此外,我的术语可能已关闭(声明,实例化等),因为我仍在学习Java和OOP.

我正在阅读教科书:数据结构和抽象,Frank Carrano的第3版(第20章:字典实现),我遇到了一个非常标准的外观类,其中包含私有内部类.但是有一些关于我不太了解的方法.

我很难理解为什么要将对象(或对象数组)声明为外部类中的字段,然后在构造函数中实例化一个临时对象并将该字段初始化为临时对象而不是仅仅实例化该属性本身在构造函数中.

编辑:我将类型参数添加回代码...在这种情况下,K&V用于键和值,因为我们正在使用字典.我不知道这个问题是否重要......

我在这里重写了有问题的代码,重命名类等等,所以它们不是那么本地化的:

public class OuterClass<K, V> implements SomeInterface<K, V>
{
     private InnerClass<K, V>[] foo;                  // Declare array of inner class object
     private final static int CAPACITY = 10;    // Initial Array Capacity

     // Outer Class Constructor
     public OuterClass()
     {
          InnerClass<K, V>[] tempFoo = (InnerClass<K, V>[])new InnerClass[CAPACITY];
          foo = tempFoo;
     }

     // ...

     private class InnerClass<S, T>
     {
          // Inner Class Constructor
          private InnerClass()
          {
               // ...
          }

          // ...
     }
}
Run Code Online (Sandbox Code Playgroud)

如上所述,我试图摆脱代码中的任何具体细节,因为我认为它们与问题无关.有没有理由不在外层类构造函数中执行此操作:

foo = (InnerClass[])new InnerClass[CAPACITY];
Run Code Online (Sandbox Code Playgroud)

代替:

InnerClass[] tempFoo = (InnerClass[])new InnerClass[CAPACITY];
foo = tempFoo;
Run Code Online (Sandbox Code Playgroud)

Men*_*ild 5

这就够了:

foo = new InnerClass[CAPACITY];
Run Code Online (Sandbox Code Playgroud)

OP的泛型编辑后更新:

对于泛型类型参数,情况会发生变化,因为您在右侧使用原始类型.在这种情况下,必须进行转换,并且您会收到编译器警告,因为强制转换不能是类型安全的.所以我们有:

foo = (InnerClass<K, V>[]) new InnerClass[CAPACITY];
Run Code Online (Sandbox Code Playgroud)