2

Javaでネストされた列挙を実装しようとしています。次のインターフェイスは非常にうまく機能しますが、静的なvalueOf()メソッドは使用できません。それを「再構築」する方法はありますか?

すべての回答をありがとう!

public static interface ANIMAL
{
    public static final ANIMAL UNKNOWN = _.UNKNOWN;

    public static enum _ implements ANIMAL
    {
        UNKNOWN,
    }

    public static enum MAMMAL implements ANIMAL
    {
        ;
        public static enum LAND implements ANIMAL
        {
            HORSE,
            COW;
        }
        public static enum SEA implements ANIMAL
        {
            WHALE;
        }
    }
}
4

1 に答える 1

3

あなたが提供した例がsscceなのか実際の実装なのかはわかりませんが、陸の生き物になるために哺乳類である必要はないことを覚えておいてください。さらに、列挙型は継承できないため、次のような方法を使用することをお勧めします。

public enum Type {
  MAMMAL, REPTILE, INSECT;
}

public enum Region {
  LAND, SEA, AIR;
}

public enum Animal {
  HORSE (Type.MAMMAL, Region.LAND),
  WHALE (Type.MAMMAL, Region.SEA),
  LIZARD (Type.REPTILE, Region.LAND),
  ANT (Type.INSECT, Region.LAND),
  WASP (Type.INSECT, Region.AIR);

  private Type t;
  private Region r;
  private Animal(Type t, Region r) {
    this.t = t;
    this.r = r;
  }
  public Type getType() { return t; }
  public Region getRegion() { return r; }
}

このようにして、継承階層に閉じ込められることなく、必要に応じてさまざまな記述子を変更できます。


さて、私はあなたが何を望んでいるのか理解しました。可能ですが、各列挙を個別に実装する必要があります。問題はあなたができないということですANIMAL.valueOf("HORSE")、しかしあなたはすることができますANIMAL.MAMMAL.LAND.valueOf("Horse")。もう1つのオプションは、を作成しHashMap<String, Enum>、それを使用して機能を概算することですが、適切なサブクラスにキャストすることが難しいため、使用するのは困難です。しかし、それはすべての方法を持っているでしょうEnum...

于 2012-12-13T14:08:18.890 に答える