可以枚举枚举以添加新元素吗?

我想要使​​用现有的枚举并为其添加更多元素,如下所示:

enum A {a,b,c}

enum B extends A {d}

/*B is {a,b,c,d}*/

这在Java中可能吗?


不,你不能用Java来做到这一点。 除了别的以外, d可能大概是A一个实例(考虑到“扩展”的正常思想),但只知道A用户不会知道它 - 这会挫败枚举的含义,已知的一组值。

如果您可以告诉我们更多关于您想如何使用它的信息,我们可能会提出其他解决方案。


枚举代​​表了可能值的完整列举。 所以(无益的)答案是否定的。

作为一个真实问题的例子,需要平日,周末和工会,星期几。 我们可以在几天之内定义所有日期,但之后我们无法表示周日和周末特别的属性。

我们可以做的是有三种枚举类型,在平日/周末日和星期几之间映射。

public enum Weekday {
    MON, TUE, WED, THU, FRI;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum WeekendDay {
    SAT, SUN;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum DayOfWeek {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}

或者,我们可以有一个开放式的界面用于星期几:

interface Day {
    ...
}
public enum Weekday implements Day {
    MON, TUE, WED, THU, FRI;
}
public enum WeekendDay implements Day {
    SAT, SUN;
}

或者我们可以结合这两种方法:

interface Day {
    ...
}
public enum Weekday implements Day {
    MON, TUE, WED, THU, FRI;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum WeekendDay implements Day {
    SAT, SUN;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum DayOfWeek {
    MON, TUE, WED, THU, FRI, SAT, SUN;
    public Day toDay() { ... }
}

推荐的解决方案是可扩展的枚举模式。

这涉及到创建一个接口并使用你当前使用枚举的地方。 然后使枚举实现接口。 您可以通过使新的枚举扩展接口来添加更多的常量。

链接地址: http://www.djcxy.com/p/86103.html

上一篇: Can enums be subclassed to add new elements?

下一篇: level list '[a,b,c,...] to function a