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