我偶然发现了以下问题,我无法从Java 1.5(java.lang包)中定义的这个类扩展和实现
public abstract class Enum<E extends Enum<E>> {...
}..
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是创建自己的枚举类型,它具有不同的序数值.我不想通过使用不同的序数名称来实现它,比如getCode()等.所以我想我可以继续扩展上面的类.
public final class XYZ extends Enum<XYZ> { //Does not work.
//
A("A", 1),
B("B", 7);
.
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到以下几点:
public enum NEWEnum {
A(1),
B(7);
private int code;
private NEWEnum(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
}
Run Code Online (Sandbox Code Playgroud)
我宁愿在Enum中使用通常的命令,如ordinal()和name().
你无法像这样扩展Enum.它内置于编译器或运行时(不确定是哪个).
但看起来你正试图解决错误的问题; 枚举值的序数不应该具有任何功能意义.只要你给它一个,它应该有一个不同于'Ordinal'的名字.您的第二个代码段远远优于您的第一个代码段.
一般来说,依靠序数来做任何事都是不好的做法; 它可能永远不应该首先暴露出来.您唯一可以依赖的是名称和您自己分配的任何价值.
如果你命名你的字段'序数'对你来说很重要,那么只需使用类型安全的枚举模式(第21项),这只是Enum的一个实现.