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