在Java中嵌套枚举

我想要嵌套一些枚举。 我所代表的对象是Flags,有一个类型和一个值。 存在离散数量的类型,并且每种类型具有一组不同的可能值。

因此,如果类型A可以具有值1,2或3,而类型B可以具有值4,5,6,那么我希望能够执行以下操作:

Flag f = Flag.A.1; f.getType() - returns "A" f.getValue() - returns "1" Flag f2 = Flag.A.4; -- Syntax error. 

我正在疯狂地尝试在枚举中嵌入枚举 – 这是我正在尝试的可能 – 我是否需要完全抛弃枚举并使用静态成员手动编写静态类?

到目前为止,我的最大努力是:

 public class Flag { enum A extends Flag { ONE("ONE"), TWO("TWO"), THREE("THREE"); private A(String value) { Flag.type = "A"; Flag.value = value; } } private static String type; private static String value; } 

但如果我这样做:

 Flag f = Flag.A.ONE; 

这些类型是不兼容的。

你不能将数字作为枚举。 它必须是一个标识符。

你可以这样做

 interface Flag { String getType(); int getValue(); enum A implements Flag{ one, two, three; String getType() { return getClass().getSimpleName(); } int getvalue() { return ordinal()+1; } } enum B implements Flag{ four, five, six; String getType() { return getClass().getSimpleName(); } int getvalue() { return ordinal()+4; } } } Flag f = Flag.A.one; 

然而,更简单的选择可能是

 enum Flag { A1, A2, A3, B4, B5, B6; public String getType() { return name().substring(0,1); } public int getValue() { return name().charAt(1) - '0'; } } Flag f = Flag.A1; 

无法嵌套枚举。 但枚举可以实现接口。 为什么不将AB作为两个不同的枚举,它们都使用getType()getValue()方法实现TypedEnum接口?

据我所知,它们是一种单身人士。 这意味着枚举X {A,B}有两个单例实例A,B。 如果你有嵌套枚举A {P,Q},你怎么说XA是XAP还是XAQ? 我希望我能够更简单地说出来。

使用静态类。