我想嵌套一些枚举。我代表的对象是标志,具有类型和值。有离散数量的类型,每种类型都有一组不同的可能值。
因此,如果类型 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)