java - 在 Java 中创建具有给定数量参数的子类构造函数
问题描述
假设我有一个类SuperClass
,它只是存储不同的对象。它应该包含它存储的对象的数量,并将对象按顺序存储在某种类型的列表中(目前正在考虑使用数组或 an ArrayList
,但我愿意改变它)。
然后我想创建只存储一定数量对象的子类。例如,我可能有SubClassA
、SubClassB
和SubClassC
,它们分别采用 2、3 和 2 个对象。我认为正确的方法是将每个子类的对象数量存储为public static int
.
但是,我不想为每个子类编写新的构造函数,因为这样的子类会很多。此外,它们都遵循相同的模板:获取给定数量(the static int
)的对象并将它们存储在列表中。有没有办法在Java中做到这一点?
需要明确的是,我对修改类结构不持开放态度,因为我需要对类体之外的每个类应用不同的规则。如果没有可能的方法来设计这样多个子类采用相同数量的参数(例如SubClassA
,并且SubClassC
不能同时存在),那么我将接受一个不允许重复数量的参数的解决方案。(希望我可以做一些类似SubClassA
extendsSubClass<2 args>
和SubClassC
extends的事情SubClass<2 args>
。如果没有,我想我会存储另一个数据成员来标识对象,但这很不雅。)
解决方案
使用带有对象数组或更确切地说是可变参数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
}
推荐阅读
- selenium - 如何为执行相同测试方法的每个测试用例动态使用@Description(在诱惑报告中)
- android - Android Worker 有时不发送通知
- json - 如何删除 json 中的 \n、\r、\t
- sql - 具有(可避免的)多个 nm 关系的数据库?
- mysql - 通过 GraphQL 获取数据
- javascript - 验证注册字段奇怪的问题
- javascript - jquery通过滚动控制动画
- excel - 在所有工作表中只保留一个范围 - VBA
- java - Payara (glassfish) 管理控制台在加载时卡住
- javascript - 如何将项目正确添加到reactjs中的状态(空数组)?