如何向ArrayList添加不同的内部类?

时间:2015-06-14 21:57:20

标签: java arraylist inner-classes

所以,我正在建立一个基于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中添加这些不同的单元内部类:

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纠正)。

2 个答案:

答案 0 :(得分:2)

在您提供的示例代码中,TroopUnitEliteTroopUnit是{strong>非 Unit的子类型。它们是inner classes

如果您希望它们是Unit的子类,则需要扩展 Unit。例如;

public class Unit {}
public class TroopUnit extends Unit {}

在上面的示例中,TroopUnit扩展(因此是Unit的子类。从快速浏览一下,看起来好像你可以在内部类声明的末尾添加extends Unit,它应该按照你的意愿行事。

我希望这会有所帮助。

参考文献&amp;进一步阅读:

答案 1 :(得分:0)

首先,子类应该扩展一个类。像这样:

public class TroopUnit extends Units{}

第二,回答你的标题问题,这与你的代码问题无关,就是你应该在层次结构中得到一个类而不是你要添加到列表中的对象,因为在java Object < / em>是所有类的父级,然后您可以像这样实例化List:

List<Object> unitsList = new ArrayList<Object>();