有没有办法编写可以扩展的枚举。我有几种方法可以随时提供给我的枚举。例如,我对我的数据库字段使用枚举。我在数据库中包含实际的字段名称。

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不是你追求的结构。它们是静态常量恕我直言。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top