![](/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.