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")。另一种选择是创建一个HashMap<String, Enum>, 并使用它来近似功能,但它很难使用,因为它很难转换为正确的子类。但它将具有Enum...的所有方法

于 2012-12-13T14:08:18.890 回答