首页 > 解决方案 > 在 Java 中创建具有给定数量参数的子类构造函数

问题描述

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

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

但是,我不想为每个子类编写新的构造函数,因为这样的子类会很多。此外,它们都遵循相同的模板:获取给定数量(the static int)的对象并将它们存储在列表中。有没有办法在Java中做到这一点?

需要明确的是,我对修改类结构不持开放态度,因为我需要对类体之外的每个类应用不同的规则。如果没有可能的方法来设计这样多个子类采用相同数量的参数(例如SubClassA,并且SubClassC不能同时存在),那么我将接受一个不允许重复数量的参数的解决方案。(希望我可以做一些类似SubClassAextendsSubClass<2 args>SubClassCextends的事情SubClass<2 args>。如果没有,我想我会存储另一个数据成员来标识对象,但这很不雅。)

标签: java

解决方案


使用带有对象数组或更确切地说是可变参数SuperClass的构造函数进行抽象。protected

然后让每个子类声明一个构造函数,该构造函数准确地接受它支持的对象数量。不需要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
}

推荐阅读