Java可扩展枚举

7

有没有一种方法可以编写可扩展的枚举。我有几个方法希望在我的枚举中始终可用。例如,我在数据库字段中使用枚举。我将实际字段名称包含在数据库中。

public enum ORDERFIELDS
        {
            OrderID("Order_ID");
            private String FieldName;

            private ORDERFIELDS(String fname)
                {
                    this.FieldName = fname;
                }

            public String getFieldName()
                {
                    return FieldName;
                }
        } 
6个回答

16

所有枚举类型都隐式继承自java.lang.Enum。由于Java不支持多重继承,一个枚举类型不能再继承其他类。


10

如果我理解正确,您想要做的是类似于这样的事情:

public abstract class DatabaseField {
    private String fieldName;

    private DatabaseField(String fieldName) {
        this.fieldName = fieldName;
    }

    public String getFieldName() {
        return fieldName;
    }
}

那么就定义你的枚举来扩展这个类。不过,很遗憾,枚举不能继承类,但它可以实现接口,因此目前最好的方法是定义一个包含 getFieldName() 方法的接口,并让所有枚举实现该接口。

然而,这意味着你将不得不在所有枚举中重复实现此方法(和任何其他方法)。在这篇问题中有一些关于如何最小化此重复的建议。


6

枚举可以实现接口但不能继承,因为在编译时它们被转换为java.lang.Enum。


我认为这是最明智的设计,对吧?如果一个枚举实现了正确的接口,那么你就知道它是数据库字段的枚举。 - Robert Van Hoose

6

0

0

像Josh Bloch在他的Effective Java中定义的那样,手工制作类似机制的枚举。

我想补充的是,如果您需要“扩展”枚举,则也许枚举不是您要找的构造。在我看来,它们应该是静态常量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接