Java - 通常处理子类的创建

时间:2011-09-28 07:46:45

标签: java constructor subclass

我有三个非常相似的类,除了一个方法。因此,我选择将其余功能放入抽象超类中。然而,当谈到创建这些类的实例时,我对如何实现像“明显”或“优雅”方法这样的东西感到茫然。它们的构造函数基本相同,我需要多个实例,所以我想做类似以下的事情:

private SubclassA[] subclassA_array, SubclassB[] subclassB_array, SubclassC[] subclassC_array;
subclassA_array = new SubclassA[getNumInstancesOfClassANeeded()]
subclassB_array = new SubclassA[getNumInstancesOfClassBNeeded()]
subclassC_array = new SubclassA[getNumInstancesOfClassCNeeded()]

// might have my syntax wrong here; array of the three subclass arrays
private Superclass[][] superArray = new Superclass[][3];
superArray[0] = subclassA_array;
superArray[1] = subclassA_array;
superArray[2] = subclassA_array;
for ( Superclass[] array: superArray )
    for(int i = 0; i< array.length; i++)
      //  array[i] = new..... what goes here?
    }
}

如何在最内层的循环中找到合适的类?这实际上是解决问题的一种非常奇怪的方式;我错过了一些更明显的东西吗?我应该说“跟它一起去吧!”并且只有三个独立的循环?

3 个答案:

答案 0 :(得分:1)

  

我应该说“跟它一起去吧!”并且只有三个独立的循环?

IMO,是的。


您可以执行以下操作:

  1. 使用array.getClass()获取数组的类
  2. 使用getConmponentType()获取阵列的基本类型
  3. 使用newInstance()创建实例
  4. 将实例引用分配给数组。
  5. ...但这导致代码脆弱,就像用大锤敲碎核桃一样。

答案 1 :(得分:0)

您可以在内循环中使用反射,例如array.getClass().getComponentType().newInstance(),但我认为可能有更好的解决方案来解决整体问题(要回答这个问题,我需要有关您想要编码的内容的更多信息)

答案 2 :(得分:0)

您可以创建静态方法

public static subclassA[] getNewInstances(int numberOfInstances);

可以访问静态方法,而无需创建新实例SubclassA.getNewInstances(3)

在矩阵的定义中,您需要首先定义第一个维度(因此它变为new Superclass[3][]