在Java中使用给定数量的参数创建子类构造函数

时间:2019-05-22 04:43:11

标签: java

假设我有一个类SuperClass,它仅存储不同的对象。它应该包含它存储的对象数量,并按某种类型的列表顺序存储这些对象(当前正在考虑使用数组或ArrayList,但是我愿意改变它)。

然后,我想创建仅存储一定数量对象的子类。例如,我可能有SubClassASubClassBSubClassC,它们分别带有2、3和2个对象。我认为正确的方法是将每个子类作为public static int存储的对象数。

但是,我不想为每个子类编写新的构造函数,因为会有很多这样的子类。同样,它们都遵循相同的模板:采用给定数量(static int)的对象并将它们存储在列表中。用Java可以做到吗?

很明显,我不愿意修改类结构,因为我需要对类主体之外的每个类应用不同的规则。如果没有办法设计多个子类采用相同数量的参数(例如SubClassASubClassC不能同时存在),那么我将接受一个不允许重复的解决方案参数数量。 (希望我可以做类似SubClassA扩展SubClass<2 args>SubClassC扩展SubClass<2 args>的操作。如果没有,我想我将存储另一个数据成员来标识对象,但这太不优雅了。)

1 个答案:

答案 0 :(得分:0)

使用SuperClass构造函数来使protected抽象,该构造函数采用对象数组或vararg。

然后让每个子类声明一个构造函数,该构造函数精确接受其支持的对象数量。不需要public static int常量。

示例

public abstract SuperClass {
    private final Object[] objs;

    protected SuperClass(Object... objs) {
        this.objs = objs;
    }
    public int size() {
        return this.objs.length;
    }
    public Object get(int index) {
        return this.objs[index];
    }
    // Other methods
}

public final class SubClassA extends SuperClass {
    public SubClassA(Object obj1, Object obj2) {
        super(obj1, obj2);
    }
    // Other methods
}

public final class SubClassB extends SuperClass {
    public SubClassB(Object obj1, Object obj2, Object obj3) {
        super(obj1, obj2, obj3);
    }
    // Other methods
}