2016-07-11 53 views
0

我有很多類的集合。這些類具有相似的本質名稱,但具有不同的值。例如,我有SpearmenSwordsman。這兩個類具有相同的本質名稱,但具有不同的值。現在。假設我有另一個班。 Entity。我怎樣才能調用類的構造函數,並指定實體應該是哪種類型的單位,而不需要通過if語句鏈去扯掉object是更具體的類型Swordsman還是類型Spearmen或者......通過我所有的類。如何在不遍歷所有可能的類型的情況下確定對象類型?

我可以做一個簡單的可運行的例子,但我不知道這是否是必要的,因爲我已經解釋過上述

+0

矛和刀客是不同類?他們是否繼承了同一個基類? –

+0

@ShlomiHaver他們是兩個不同的類。 – Colourfit

+0

他們有相同的屬性? –

回答

1

什麼,我可以建議你做的是創建一個基類,讓我們把它叫做英雄

public class Hero 
{ 
    public HeroType Type { get; set; } 
    public int Power { get; set;} 

    public Hero(HeroType type, int power){ 
     this.Type = type; 
     this.Power = power; 
    } 

    .... 
} 

,然後創建英雄類型的枚舉:

enum HeroType{ 
    Spearmen, 
    Swordsman, 
    ... 
} 

每次你創建一個新的英雄,你只需要指定像這樣

Hero swordsman = new Hero(HeroType.Swordsman,50) 

他的類型這種方式,你son't需要CREA您可以將所有對象保存在同一個集合中,因爲它們全部來自相同的基本類型。

如果您需要一個擁有更多屬性的特殊英雄,您可以創建一個繼承自Hero基類的新類。

+0

謝謝!如果你可以發佈一個可運行的例子,雖然這將是太棒了 – Colourfit

+0

@JammehCarr複製我在我的答案寫的代碼它應該幫助你開始,然後你可以添加你的自定義功能取決於你在做什麼。 –

+0

好的,會做!謝謝您的幫助! – Colourfit

0

Java反射API我會給你的方法來完成你所需要的。 Object.getClass()....

+0

我知道如何做到這一點,我只是不知道如何做到這一點,而無需重複遍歷我所有的課程 – Colourfit

+0

@JammehCarr使用開關狀態來繼續您的流程。由於我們有關於您的問題的一般信息,最簡單的路徑是獲取類名稱的字符串表示形式,並切換替代形式,並繼續 – Bonatti

1

如果你想找出一個對象的類名,你可以嘗試:

String className = variable.getClass().getSimpleName(); 
相關問題