2017-06-06 4 views
0

これを行うより良い方法はありますか?ネストされたenumを使用する

スピゴットのエンチャントプラグインを作成しようとしたところ、 各クラスに含まれるさまざまな 種類のエンチャントを持つ3種類のエンチャントが好きです。 初めてenumで作業しています。ありがとうございます。

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

'型の列挙型は冗長であるようです。 – shmosel

+0

@shmoselもっと同意できないので、私は投稿しています。しかし、Enchantments列挙型の別の議論を追加しなければ列挙型の名前を取得する方法は見つけられませんでしたが、カテゴリのみです。 –

答えて

0

タイプの列挙型を削除できます。 YourEnum.TYPE.name()メソッドを使用すると、列挙型のString表現を取得できます。

エンチャントの現在のリストを拡張する場合は、データ駆動型の設計を使用することもできます。これは、プログラムに値をハードコーディングするのではなく、ファイルからロードすることを基本的に意味します。このファイルには、名前、カテゴリなどのエンチャントに関するすべての情報が定義されます。エンチャントの数を増やしたいときは、プラグインを再コンパイルする必要がないという利点があります。

関連する問題