如何将不同的内部 类 添加到 ArrayList?
How do I add different inner classes to an ArrayList?
因此,我正在构建一个基于 Warhammer 40k 桌面游戏的非常基础的程序,作为我的 Comp Sci class 的额外学分分配。我开始制定规范,然后实施规范。在这个游戏中,我有一支 class 军队,它有一个 class 单位的 ArrayList:
List<Units> unitsList = new ArrayList<Units>();
我创建了 class 个单元,内部 class 包含不同的单元类型。因此,其中的代码片段将是:
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:
中添加这些不同的内部 classes 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++;
}
}
}
但是,我 运行 遇到了问题,因为我必须使用特定类型的 innerclass 声明和实例化 ArrayList,以便向其添加内部 class .例如,
List<Units.someUnitInnerClass> unitsList = new ArrayList<Units.someUnitInnerClass();
那么,是否有解决此问题的方法,我可以将任何内部 classes 添加到 ArrayList?我是否错误地解决了这个问题?如果是这样,还有哪些其他选择?谢谢!
编辑:我最初将其列为“如何向 ArrayList 添加不同的子 classes,但这是一个错误(由 Rudi Kershaw 更正)。
在您提供的示例代码中,TroopUnit
和EliteTroopUnit
是而非 Unit
的子类型。他们是 inner classes.
如果您希望它们成为 Unit
的子class,它们需要扩展 Unit
。例如;
public class Unit {}
public class TroopUnit extends Unit {}
在上面的示例中,TroopUnit
扩展(因此是 Unit
的子class)。快速浏览一下,您似乎只需将 extends Unit
添加到内部 class 声明的末尾,它就会按照您的预期进行。
希望对您有所帮助。
参考资料和进一步阅读:
首先,subclass 应该扩展 class。像这样:
public class TroopUnit extends Units{}
其次,回答你的标题问题,这与你的代码问题无关,你应该在层次结构中得到一个 class 比你添加到列表中的 object ,并且因为 java Object 是所有 类 中的 parent 那么你可以像这样实例化你的列表:
List<Object> unitsList = new ArrayList<Object>();
因此,我正在构建一个基于 Warhammer 40k 桌面游戏的非常基础的程序,作为我的 Comp Sci class 的额外学分分配。我开始制定规范,然后实施规范。在这个游戏中,我有一支 class 军队,它有一个 class 单位的 ArrayList:
List<Units> unitsList = new ArrayList<Units>();
我创建了 class 个单元,内部 class 包含不同的单元类型。因此,其中的代码片段将是:
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:
中添加这些不同的内部 classes Unitspublic 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++;
}
}
}
但是,我 运行 遇到了问题,因为我必须使用特定类型的 innerclass 声明和实例化 ArrayList,以便向其添加内部 class .例如,
List<Units.someUnitInnerClass> unitsList = new ArrayList<Units.someUnitInnerClass();
那么,是否有解决此问题的方法,我可以将任何内部 classes 添加到 ArrayList?我是否错误地解决了这个问题?如果是这样,还有哪些其他选择?谢谢!
编辑:我最初将其列为“如何向 ArrayList 添加不同的子 classes,但这是一个错误(由 Rudi Kershaw 更正)。
在您提供的示例代码中,TroopUnit
和EliteTroopUnit
是而非 Unit
的子类型。他们是 inner classes.
如果您希望它们成为 Unit
的子class,它们需要扩展 Unit
。例如;
public class Unit {}
public class TroopUnit extends Unit {}
在上面的示例中,TroopUnit
扩展(因此是 Unit
的子class)。快速浏览一下,您似乎只需将 extends Unit
添加到内部 class 声明的末尾,它就会按照您的预期进行。
希望对您有所帮助。
参考资料和进一步阅读:
首先,subclass 应该扩展 class。像这样:
public class TroopUnit extends Units{}
其次,回答你的标题问题,这与你的代码问题无关,你应该在层次结构中得到一个 class 比你添加到列表中的 object ,并且因为 java Object 是所有 类 中的 parent 那么你可以像这样实例化你的列表:
List<Object> unitsList = new ArrayList<Object>();