在Java中,有没有办法从现有的枚举中定义新的枚举?我想要以下功能.
public enum A{1, 2, 3, 4, 5, 6, 7, 8, 9};
public enum B{1, 2, 3, 4};
public enum C{3, 4, 5, 6, 7};
Run Code Online (Sandbox Code Playgroud)
1,2,3和所有都必须相同,即
A.1 == B.1 = true
B.4 == C.4 = true
Run Code Online (Sandbox Code Playgroud)
一个现实生活中的例子是DAYS,WEEKDAYS,WEEKENDDAYS,LECTUREDAYS,PARTYDAYS等.
你无法扩展枚举,但从你的周/周末日例来看,似乎你可能需要稍微考虑一下.如果有enum Days{ MON, TUE, WED, THU, FRI, SAT, SUN },请考虑如下周/周末:
EnumSet<Days> weekDays = EnumSet.range(Days.MON, Days.FRI);
EnumSet<Days> weekendDays = EnumSet.range(Days.SAT, Days.SUN);
EnumSet<Days> partyDays = EnumSet.of( Days.TUE, Days.THU );
Run Code Online (Sandbox Code Playgroud)
诸如"任何工作日也是派对日"之类的自然问题?然后可以按照您的预期表达:
!Collections.disjoint(weekDays, partyDays)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
我认为你最好的选择是做类似的事情:
public class EnumTest
{
public enum A {
X1(1), X2(2), X3(3), X4(4), X5(5), X6(6), X7(7), X8(8), X9(9);
private final int value;
public int getValue() { return this.value; }
A(int value) {
this.value = value;
}
}
public enum B {
X1(1), X2(2), X3(3), X4(4);
private final int value;
public int getValue() { return this.value; }
B(int value) {
this.value = value;
}
}
public enum C {
X3(3), X4(4), X5(5), X6(6), X7(7);
private final int value;
public int getValue() { return this.value; }
C(int value) {
this.value = value;
}
}
public static void main()
{
A a;
a = A.X1;
B b;
b = B.X1;
if (b.getValue()==a.getValue()) {
// do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果这样做,您应该小心,您实际上正在使用枚举的类型安全性,否则为什么不将所有值存储为整数呢?如果您有时想要在枚举之间进行比较,但通常想要使用类型安全,这样的每个枚举值都有其他含义的东西可能会很有用。在您的“DAYS,WEEKDAYS,WEEKENDDAYS,LECTUREDAYS”示例中,我将确保内部值是强类型的,例如 Java8 java.time.DayOfWeek。
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |