我有一个来自另一个我无法更改的库的现有枚举,如下所示:
enum PersonTypes {
ADT("Adult"), CHD("Child"), INF("Infant");
private String value;
PersonTypes(String value) { this.value = value; }
}
Run Code Online (Sandbox Code Playgroud)
我想用一个接口增强枚举,以便提供一些功能。当然,下面的代码是无效的,但展示了我想要实现的目标:
enum PrintablePersonTypes implements Printable {
PersonTypes.ADT, PersonTypes.CHD, PersonTypes.INF;
@Override
public void printme() {
sysout("I'm a " + super.value);
}
}
Run Code Online (Sandbox Code Playgroud)
晚安喜欢:
List<PrintablePersonTypes> list;
list.stream.forEach(p -> o.printme());
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
我认为这对枚举是不可能的。由于枚举是“隐式最终的”,并且“枚举常量定义了枚举类型的实例” JLS 8.9,因此您既不能使用继承也不能定义不同类型的枚举常量。
我能想到的最接近的事情是
enum PrintablePersonTypes implements Printable {
ADT(PersonTypes.ADT),
CHD(PersonTypes.CHD),
INF(PersonTypes.INF);
private PersonTypes pt;
private PrintablePersonTypes(PersonTypes pt) {
this.pt = pt;
}
@Override
public void printme() {
sysout("I'm a " + pt.value);
}
}
Run Code Online (Sandbox Code Playgroud)
即通过成员显式创建映射。