可以枚举枚举以添加新元素吗?
我想要使用现有的枚举并为其添加更多元素,如下所示:
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