2016-05-16 53 views
0

假設我有50個不同的類擴展了「CustomEnchantment」,有沒有什麼辦法在抽象類中有一個靜態的getter讓我獲得一個特定類的值。假設我想要「狂暴」的最高等級,那麼我會以靜態方式做Rage.getMaxLevel()或其他東西。問題是獲得一個實例意味着我必須爲每個附魔製作50+個實例1。我想只是有一個固定的方式來獲得特定的附魔的最高水平。我試圖只包含一個「getMaxLevel()」,並且它可以很好地返回它,但是由於這樣,我需要一個擴展抽象類的每個類的實例,我寧願有一種靜態方法來獲得1個特定的類值。 一些例子:使用getter方法從一個特定的類擴展抽象類

我有3個類擴展Person。 Person包含變量年齡和名稱。 在Josh的課堂上,他的名字被設置爲「Josh」,年齡爲17歲。在Jeff的課程中,他的名字是「Jeff」,年齡爲20歲。在Jennica的課程中,名字是「Jennica」,她的年齡是19歲。我需要的是一種方法,只需要一種方法就可以隨時從這些類中的特定類中返回年齡。所以例如(這不會工作)getAge(珍妮卡)獲得珍妮卡的年齡,getAge(喬希)爲他的年齡等返回17。我需要這個靜態或以我可以輕鬆訪問它的方式使用。

回答

0

通過一個靜態變量,你可以意識到這一點。你只需要注意你的靜態成員總是由最高級別的子類更新。如果你的代碼增長了,那將會使它無法維護。

更好的方法可以是創建一個像「CustomEchantmentManager」或其他的管理器類。它可以存儲你所有實例的列表。此外,它可以存儲一個屬性,如CustomEchantment enchantmentWithHighestLevel,其中存儲具有最高級別的實例。讓你的經理觀察附魔,並在一個附魔的新等級之後,檢查它的等級是否高於實際存儲的附魔等級,如果是,則覆蓋它在屬性中的引用。這不會更改所有實例,因爲它只是引用具有最高級別的實例。

舉例經理:

public class CustomEnchantmentManager implements Observer { 

    private ArrayList<CustomEnchantment> enchantments; 
    private CustomEnchantment enchantmentWithHighestLevel = null; 

    public CustomEnchantmentManager() { 

     enchantments = new ArrayList<CustomEnchantment>(); 

    } 


    @Override 
    public void update(Observable obs, Object o) { 
      if(this.enchantmentWithHighestLevel.getLevel() > ((CustomEnchantment)o).getLevel) { 
       //do Nothing 
      else { 
       this.enchantmentWithHighestLevel = (CustomEnchantment)o; 
    } 
} 

示例的魅力:

public class CustomEnchantment() extends Observable { 

    public int level = 0; 

    public CustomEnchantment() { 


    } 


    public void incrementLevel() { 
     this.level++; 
     setChanged(); //method from Observable 
     notifyObservers(this); //send Observers instance of this object 
    } 
} 
+0

所以我應該會被創建和存儲每個實例的經理是你說的話,然後有一個靜態int你在哪裏傳遞你想要的最高等級的附魔等等,並從那裏去? –

+0

這看起來很有用,如果我不得不增加關卡的話,但我實際上並沒有考慮到關卡的升級,每個結界都有一個關卡設置,我只需要一種方法來選擇任何附魔,它會返回附魔的最高等級。所以如果我需要Rage的最高級別,我會(不確定參數)CustomEnchantmentManager.getMaxLevel(Rage.class)或類似的實際工作,如果我使用相同的方法,但給它輕掃.class作爲參數,它應該爲附魔的Swipe返回最高等級。 –

相關問題