簡體   English   中英

我如何以簡單的方式創建不同類的多個實例?

[英]How i would create multiple instances of different classes in an easy way?

我正在尋找一種方法來創建不同類的不同實例,而無需編寫如下代碼:

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

但是這樣做會導致實例數量過多(例如70個)。 在不編寫70行具有相同代碼種類的代碼的情況下,如何制作好的代碼有什么想法? 如果您不明白:

用經典方法初始化70個不同的實例(不同的類,一切都不同)

PersonInstance instance = new PersonInstance();

對於70次(不同的類,不同的實例標識符),有點不客氣。 我想知道如何不使用這種方式來初始化它們。 顯然,所有類都有共同點,它們都在同一類上擴展。 我想知道是否可能?

如果類是相互關聯的,即繼承,則創建一個數組。 訪問C ++創建對象數組(來自不同的類)

如果我理解這是正確的,則必須為所有不同的類創建一個超類。 例:

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());
}

您可以使用依賴注入/控制反轉(IoC)。 例如,Spring帶有@Autowire注釋來放置您的構造函數。依賴注入容器執行所有初始化,以解析所有依賴項並將它們傳遞給適當的構造函數,而無需調用new自己。 該代碼變得更簡潔,更易於進行單元測試。.稍后,當我在PC上時,我將添加鏈接:)

而不是這樣做:

PersonInstance instance1 = new PersonInstance();
PersonInstance instance2 = new PersonInstance();
...
...
...
PersonInstance instance99 = new PersonInstance();

您可以使用array來創建PersonInstance的所有70個實例,例如:

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,則可以將BrotherInstance添加到PersonInstance數組中,例如:

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將遍歷所有PersonInstance,無論它們是PersonInstance還是BrotherInstance,因為它們是PersonIntance或擴展PersonInstance。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM