Java:新枚举,是旧枚举的子集

Rob*_*lex 6 java enums

在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等.

Rin*_*nke 7

你无法扩展枚举,但从你的周/周末日例来看,似乎你可能需要稍微考虑一下.如果有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)

希望这可以帮助.


kor*_*vus 1

我认为你最好的选择是做类似的事情:

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