Итак, я строю очень базовую программу, основанную на настольной игре Warhammer 40k, в качестве дополнительного кредитного задания для моего класса Comp Sci. Я получаю разработку спецификаций, а затем реализую спецификации. В этой игре, у меня есть класс армия, которая имеет ArrayList из класса единиц:Как добавить разные внутренние классы в ArrayList?
List<Units> unitsList = new ArrayList<Units>();
я создал Паи класса с innerclasses, которые содержат различные типы единицы. Таким образом, фрагмент кода, который был бы:
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;
}
}
Есть несколько типов блоков, но я думаю, что вы можете получить эту идею. Я попытался добавить это различное innerclasses из блоков внутри блоков ArrayList:
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 с определенным типом InnerClass для того, чтобы добавить внутренний класс к нему. Например, List<Units.someUnitInnerClass> unitsList = new ArrayList<Units.someUnitInnerClass();
Итак, есть ли обходной путь для этой проблемы, где я могу добавить любой из внутренних классов в ArrayList? Неужели я неправильно делаю эту проблему? Если да, то каковы другие альтернативы? Спасибо!
EDIT: Первоначально я перечислил это как «Как добавить различные подклассы к ArrayList, но это была ошибка (скорректированный Rudi Kershaw)
вы совершенно правы, я имел в виду внутренние классы. Позвольте мне это исправить. Хорошо, позвольте мне попробовать это решение - спасибо. – Choonkies
Хорошо, это сработало. Мне пришлось изменить внутренние классы на статические внутренние классы, чтобы я мог создавать внутренние классы в ArrayList. Например, статический класс TroopUnit расширяет Units Кроме того, спасибо! – Choonkies
@ OmarPatel - Без проблем, я рад, что смогу помочь. Если ваша проблема решена, не забудьте принять ответ, который вам больше всего помог, щелкнув серый тик рядом с ответом. –