Java中的嵌套枚举

时间:2012-12-13 13:43:15

标签: java enums nested

我正在尝试在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;
        }
    }
}

1 个答案:

答案 0 :(得分: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")。另一种选择是创建一个HashMap<String, Enum>,并使用它来近似功能,但它很难使用,因为很难转换到正确的子类。但它会拥有Enum ...

的所有方法