2017-06-06 1 views
0

Gibt es einen besseren Weg, dies zu tun?Verwenden verschachtelter Enums

Beim Versuch, ein Verzauberungs-Plugin für Spigot zu erstellen, möchte ich 3 Klassen von Verzauberungen mit verschiedenen Arten von Verzauberungen haben, die in jeder Klasse enthalten sind. Zum ersten Mal mit enums arbeiten, danke.

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

Bei einer solchen Skalierung ist das datengesteuerte Design eine ziemlich gute Alternative, vor allem, wenn Sie es erweitern möchten. –

+1

Die Enumeration "Typen" scheint überflüssig zu sein. – shmosel

+0

@smossel Ich kann dem nicht zustimmen, weshalb ich posten werde. Aber ohne es und ein weiteres Argument für die Enchantments enum hinzuzufügen, konnte ich keinen Weg finden, den Namen des Enums zu erhalten, nur seine Kategorie. –

Antwort

0

Sie können die Type enum einfach fallen lassen. Sie können die String-Repräsentation eines Enums mithilfe der YourEnum.TYPE.name()-Methode abrufen.

Alternativ können Sie ein datengesteuertes Design verwenden, wenn Sie die aktuelle Liste der Verzauberungen erweitern möchten. Das bedeutet, dass Sie die Werte nicht aus dem Programm laden, sondern aus einer Datei laden. Die Datei würde alles über die Verzauberungen definieren, wie den Namen, die Kategorie usw. Dies hat den zusätzlichen Vorteil, dass Sie das Plugin nicht neu kompilieren müssen, wenn Sie die Anzahl der Verzauberungen erhöhen möchten.