我偶然发现了以下问题,我无法从 Java 1.5(java.lang 包)中定义的此类扩展和实现
public abstract class Enum<E extends Enum<E>> {...
}..
我遇到的问题是创建自己的枚举类型,它具有不同的序数值。我不想通过使用不同的序数名称(如 getCode() 等)来实现它。所以我想我可以扩展上面的类。
public final class XYZ extends Enum<XYZ> { //Does not work.
//
A("A", 1),
B("B", 7);
.
}
我知道我可以执行以下操作:
public enum NEWEnum {
A(1),
B(7);
private int code;
private NEWEnum(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
}
我更喜欢在枚举中使用通常的命名,例如 ordinal() 和 name() 。
你不能像这样扩展 Enum 。它内置于编译器或运行时(不确定是哪一个)。
但看起来您正在尝试解决错误的问题;枚举值的序数不应具有任何功能含义。一旦你给它一个,它应该有一个与“Ordinal”不同的名称。您的第二个代码片段远远优于您的第一个代码片段。
一般来说,依赖序数来做任何事情都是不好的做法。它可能从一开始就不应该被曝光。您唯一可以信赖的就是名称以及您自己分配的任何值。
如果将字段命名为“ordinal”对您来说很重要,只需使用类型安全枚举模式(第 21 项), Enum 只是它的一个实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)