我如何以简单的方式创建不同类的多个实例?

时间:2016-12-25 18:13:27

标签: java class instances

我正在寻找一种方法来创建不同类的不同实例,而无需编写如下的hacky代码:

PersonInstance pinstance = new PersonInstance();
FamilyInstance finstance = new FamilyInstance();

但是这样做可能会导致实例数量过多(如70)。 关于如何制作好的代码而不写70行具有相同代码的任何想法? 如果您不理解:

使用经典方法

初始化70个不同的实例(不同的类,不同的一切)
PersonInstance instance = new PersonInstance();

70次(不同的类,不同的实例标识符)有点hacky。 我想知道如何在不使用这种方式的情况下初始化它们。 显然,所有类都有一些共同的东西,它们都扩展到同一个类。 我想知道它是否可能?

5 个答案:

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