2017-06-06 138 views
0

有沒有更好的方法來做到這一點?使用嵌套枚舉

試圖爲插口創建一個附魔插件, 我喜歡在每個類中包含3類附魔以及各種各樣的附魔類型 。 第一次使用枚舉,謝謝。

public class EnchantmentType { 

    public enum Enchantments { 
     INK(Types.INK, Category.Adrian), 
     PUFFERFISH(Types.PUFFERFISH, Category.Adrian), 
     HOLYWATER(Types.HOLYWATER, Category.Adrian), 
     URCHIN(Types.URCHIN, Category.Adrian), 
     SEALORD(Types.SEALORD, Category.Adrian), 
     DYSPEPSIA(Types.DYSPEPSIA, Category.Adrian), 
     TOXIN(Types.TOXIN, Category.Adrian), 
     YPHOON(Types.YPHOON, Category.Adrian), 
     TSUNAMI(Types.TSUNAMI, Category.Adrian), 
     SPONGE(Types.SPONGE, Category.Adrian), 
     PRISTINE(Types.PRISTINE, Category.Adrian), 
     CLEANSE(Types.CLEANSE, Category.Adrian), 
     STARLIGHT(Types.STARLIGHT,Category.Zephira), 
     GUST(Types.GUST,Category.Zephira), 
     GRAVITY(Types.GRAVITY,Category.Zephira), 
     DETERMINATION(Types.DETERMINATION,Category.Zephira), 
     COURAGE(Types.COURAGE,Category.Zephira), 
     FOREGIVENESS(Types.FOREGIVENESS,Category.Zephira), 
     TORNADO(Types.TORNADO,Category.Zephira), 
     REDEMPTION(Types.REDEMPTION,Category.Zephira), 
     PEACEFUL(Types.PEACEFUL,Category.Zephira), 
     FLEE(Types.FLEE,Category.Zephira), 
     VIRTUE(Types.VIRTUE,Category.Zephira), 
     AMBIGUITY(Types.AMBIGUITY,Category.Zephira), 
     VALERE(Types.VALERE,Category.Zephira), 
     SANDSTORM(Types.SANDSTORM,Category.Zephira), 
     REKINDLE(Types.REKINDLE,Category.Zephira), 
     THERMALS(Types.THERMALS,Category.Zephira), 
     APPERTITE(Types.APPERTITE, Category.Partial); 

     Types eType; 
     Category eCat; 

     Enchantments(Types eType, EnchantmentType.Category eCat) { 
      this.eCat = eCat; 
      this.eType = eType; 
     } 

     Category getCategory() { 
      return this.eCat; 
     } 

     Types getType() { 
      return this.eType; 
     } 

     public enum Types { 
      INK, PUFFERFISH, HOLYWATER, URCHIN, SEALORD, DYSPEPSIA, TOXIN, YPHOON, TSUNAMI, SPONGE, PRISTINE, CLEANSE, STARLIGHT, GUST, GRAVITY, DETERMINATION, COURAGE, FOREGIVENESS, TORNADO, REDEMPTION, PEACEFUL, FLEE, VIRTUE, AMBIGUITY, VALERE, SANDSTORM, REKINDLE, THERMALS, APPERTITE; 
     } 
    } 

    Enchantments eType; 
    Category eCat; 

    public EnchantmentType(Enchantment eType) { 
     this.eType = eType.getType(); 
     this.eCat = eType.getCategory(); 
    } 

    public enum Category { 
     Adrian, Zephira, Partial; 
    } 
} 
+4

在這樣的尺度下,數據驅動設計是一個不錯的選擇,特別是如果你想擴展它的話。 –

+1

'Types'枚舉似乎是多餘的。 – shmosel

+0

@shmosel我無法同意更多,這就是我發佈的原因。但沒有它,並增加了Enchantments枚舉的另一個參數,我無法找到一個方法來獲得枚舉的名稱,只有它的類別。 –

回答

0

您可以放棄Type枚舉。您可以使用YourEnum.TYPE.name()方法獲取枚舉的字符串表示形式。

或者,如果您打算擴展當前附魔列表,則可以使用數據驅動設計。這基本上意味着,不是將值硬編碼到程序中,而是從文件中加載它們。該文件將定義關於附魔的所有信息,例如名稱,類別等。這還有額外的好處,當你想增加附魔的數量時,你不必重新編譯插件。