簡體   English   中英

如何將不同的內部類添加到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糾正)。

在您提供的示例代碼中, TroopUnitEliteTroopUnit 不是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM