![](/img/trans.png)
[英]How do I add two ArrayLists of different classes that extend an abstract class into one ArrayList?
[英]How do I add different inner classes to an ArrayList?
因此,我正在基於Warhammer 40k桌面游戲構建一個非常基本的程序,作為我的Comp Sci類的額外功課。 我先制定規范,然后再實施規范。 在這個游戲中,我有一個階級軍,具有一個單位類別的ArrayList:
List<Units> unitsList = new ArrayList<Units>();
我用包含不同單元類型的內部類創建了單元類。 因此,其中的代碼片段為:
public class Units
{
int strength, toughness, attacks, save, wounds;
class TroopUnit
{
public static final int strength = 3;
public static final int toughness = 3;
public static final int attacks = 1;
public static final int save = 5;
public int wounds = 1;
}
class EliteTroopUnit
{
public static final int strength = 3;
public static final int toughness = 3;
public static final int attacks = 1;
public static final int save = 4;
public int wounds = 1;
}
}
單元類型更多,但我想您可以理解。 我試過在Units ArrayList內添加這些不同的Units內部類:
public Army(int troopPoints, int eliteTroopPoints, int commandPoints,
int commandTroopPoints, int fastAttackPoints, int heavyAttackPoints)
{
for (int i = 0; i < (troopPoints/TROOP_COST); i++)
if (troopPoints % TROOP_COST == 0)
{
if (points < MAX_POINTS)
{
unitsList.add(new Units.TroopUnit());
points += TROOP_COST;
numUnits++;
}
}
for (int i = 0; i < (eliteTroopPoints/ELITE_TROOP_COST); i++)
if (eliteTroopPoints % ELITE_TROOP_COST == 0)
{
if (points < MAX_POINTS)
{
unitsList.add(new Units.EliteTroopUnit());
points += ELITE_TROOP_COST;
numUnits++;
}
}
}
但是,我遇到了一個問題,因為我必須使用特定類型的內部類聲明並實例化ArrayList才能向其添加內部類。 例如, List<Units.someUnitInnerClass> unitsList = new ArrayList<Units.someUnitInnerClass();
因此,是否有解決此問題的方法,可以在其中將任何內部類添加到ArrayList中? 我會錯誤地解決此問題嗎? 如果是這樣,還有哪些其他選擇? 謝謝!
編輯:我最初將其列為“如何將不同的子類添加到ArrayList,但這是一個錯誤(由Rudi Kershaw糾正)。
在您提供的示例代碼中, TroopUnit
和EliteTroopUnit
不是 Unit
子類型。 他們是內部階級 。
如果希望它們成為Unit
子類,則需要擴展 Unit
。 例如;
public class Unit {}
public class TroopUnit extends Unit {}
在上面的示例中, TroopUnit
擴展(因此是Unit
的子類)。 乍一看,您似乎可以只將extends Unit
添加到內部類聲明的末尾,並且它應該按預期進行。
我希望這有幫助。
參考資料和進一步閱讀:
首先,子類應該擴展一個類。 像這樣:
public class TroopUnit extends Units{}
第二,回答標題問題,這與代碼問題無關,是您應該在層次結構上獲得比要添加到列表中的對象更高的類,並且因為在Java中Object是所有類的父類,所以您可以像這樣實例化您的列表:
List<Object> unitsList = new ArrayList<Object>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.