有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

构造函数Java一般处理子类的创建

除了一个方法之外,我有三个非常相似的类。因此,我选择将它们的其余功能放入一个抽象超类中。然而,当涉及到创建这些类的实例时,我不知道如何实现我认为“显而易见”或“优雅”的方法。它们的构造函数本质上是相同的,我需要每个构造函数的多个实例,因此我想做如下操作:

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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    您可以创建一个静态方法

    public static subclassA[] getNewInstances(int numberOfInstances);
    

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

    在矩阵的定义中,首先需要定义第一个维度(因此它变成^{

  3. # 3 楼答案

    Should I just say "to hell with it!" and just have three separate loops?

    是的


    您可以执行以下操作:

    1. 使用array.getClass()获取数组的类
    2. 使用getConmponentType()获取数组的基类型
    3. 使用newInstance()创建一个实例
    4. 将实例引用指定给数组

    。。。但这会导致脆弱的代码,就像用大锤敲碎核桃一样