我正在寻找一种方法来创建不同类的不同实例,而无需编写如下的hacky代码:
PersonInstance pinstance = new PersonInstance();
FamilyInstance finstance = new FamilyInstance();
但是这样做可能会导致实例数量过多(如70)。 关于如何制作好的代码而不写70行具有相同代码的任何想法? 如果您不理解:
使用经典方法
初始化70个不同的实例(不同的类,不同的一切)PersonInstance instance = new PersonInstance();
70次(不同的类,不同的实例标识符)有点hacky。 我想知道如何在不使用这种方式的情况下初始化它们。 显然,所有类都有一些共同的东西,它们都扩展到同一个类。 我想知道它是否可能?
答案 0 :(得分:1)
如果类是相互关联的,即继承,则创建一个数组。 访问C++ create array of objects (from different classes)
答案 1 :(得分:0)
如果我理解这是正确的,你必须为所有不同的类创建一个超类。 例如:
class B extends PersonInstance
{
//
}
class C extends PersonInstance
{
//
}
然后,您必须创建一个数组或列表,例如:
List<PersonInstance> list = new ArrayList<>();
for(int i = 0; i<=69; i++)
{
list.add(new B());
// or list.add(new C());
}
答案 2 :(得分:0)
您可以使用依赖注入/控制反转(IoC)。例如,Spring带有注释,如@Autowire
,用于放置构造函数。依赖注入容器执行所有初始化,解析所有依赖项并将它们传递给正确的构造函数,而无需自己调用new
。代码变得更清晰,更容易进行单元测试..我将在以后在PC上添加链接:)
答案 3 :(得分:0)
而不是这样做:
PersonInstance instance1 = new PersonInstance();
PersonInstance instance2 = new PersonInstance();
...
...
...
PersonInstance instance99 = new PersonInstance();
您可以使用array
创建所有70个PersonInstance实例,例如:
PersonInstance[] personInstances = new PersonInstance[N];
for(int i = 0; i < personInstances.length; i++){
personInstances[i] = new personInstances();
}
其中N
是数组中可以存储PersonInstance
实例的插槽数。在您的情况下,N
将是70:
PersonInstance[] personInstances = new PersonInstance[70];
for(int i = 0; i < personInstances.length; i++){
personInstances[i] = new personInstances();
}
然后,如果您想访问PersonInstance号k
,您可以通过以下方式访问:
PersonInstace thisPerson = personInstances[k-1];
因为数组从索引0开始,例如,如果你想访问PersonInstance 56
,你可以这样做:
PersonInstace thisPerson = personInstances[55];
希望它有所帮助。
更新的答案:
例如,如果BrotherInstance扩展了PersonInstance,您可以在PersonInstance数组中添加一个BrotherInstance,如:
PersonInstance[] personInstances = new PersonInstance[70];
//add 50 PersonInstances
for(int i = 0; i < personInstances.length-20; i++){
personInstances[i] = new PersonInstances();
}
//add 20 BrotherInstances
for(int i = 50; i < personInstances.length; i++){
personInstances[i] = new BrotherInstances();
}
逐个访问它们,如:
PersonInstance currentPerson = personInstances[24] //A PersonInstance
PersonInstance currentBrother = personInstances[61] //A Brother instance
或
BrotherInstance currentBrother = personInstances[61] //A Brother instance
或将它们全部循环:
for(PersonInstance person: personInstances){
//Do something with every person here, maybe print out something.
}
for-loop
将遍历所有PersonInstances,因为它们是PersonIntance或者扩展PersonInstance,因此它们是PersonInstance或BrotherInstance。
答案 4 :(得分:-1)
您可以使用 JAVA Reflection API , https://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html