枚举是否可以子类化以添加新元素?
我想采用现有的枚举并向其添加更多元素,如下所示:
enum A {a,b,c}
enum B extends A {d}
/*B is {a,b,c,d}*/
这在Java中可能吗?
我想采用现有的枚举并向其添加更多元素,如下所示:
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() { ... }
}