-
03-07-2019 - |
题
有没有办法编写可以扩展的枚举。我有几种方法可以随时提供给我的枚举。例如,我对我的数据库字段使用枚举。我在数据库中包含实际的字段名称。
public enum ORDERFIELDS
{
OrderID("Order_ID");
private String FieldName;
private ORDERFIELDS(String fname)
{
this.FieldName = fname;
}
public String getFieldName()
{
return FieldName;
}
}
解决方案
如果我理解正确,你想做的是这样的事情:
public abstract class DatabaseField {
private String fieldName;
private DatabaseField(String fieldName) {
this.fieldName = fieldName;
}
public String getFieldName() {
return fieldName;
}
}
然后定义你的枚举来扩展这个类。但是,遗憾的是枚举不能扩展类,但它可以实现一个接口,所以你现在可以做的最好的事情就是定义一个包含getFieldName()方法的接口,让你所有的枚举实现这个接口。
但是,这意味着您必须在所有枚举中复制此方法(以及任何其他方法)的实现。 此问题中有一些建议可以尽量减少这种重复。
其他提示
所有枚举都隐式扩展 java.lang.Enum
。由于Java不支持多重继承,因此枚举不能扩展其他任何内容。
枚举可以实现接口但不能扩展,因为在编译时它们会转换为java.lang.Enum。
抽象枚举可能非常有用(目前不允许)。但是如果你想在Sun游说某人添加它,那么就会有一个提案和原型:
http://freddy33.blogspot.com/一十一分之二千零七/抽象枚举瑞奇-卡尔森-way.html
Sun RFE:
http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 6570766
对于Java前5天的回归,请查看项目21,第5章,Josh Bloch的有效Java 。他谈到扩展“枚举”。通过添加值,但也许您可以使用一些技术来添加新方法?
用类似于Josh Bloch的Effective Java中定义的机制手工制作枚举。
如果你需要“扩展”,我会补充一点。 enum,那么也许enum不是你追求的结构。它们是静态常量恕我直言。
不隶属于 StackOverflow