Pergunta

Existe uma maneira de escrever uma enumeração que pode ser estendido. Tenho vários métodos que eu gostaria de ter sempre disponível para os meus enumerações. Por exemplo, eu usar uma enumeração para os meus campos de banco de dados. I incluem o nome do campo real no banco de dados.

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

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

            public String getFieldName()
                {
                    return FieldName;
                }
        } 
Foi útil?

Solução

Se bem entendi, o que você gostaria de fazer é algo como isto:

public abstract class DatabaseField {
    private String fieldName;

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

    public String getFieldName() {
        return fieldName;
    }
}

Em seguida, definir o seu enum para estender essa classe. No entanto, infelizmente, um enum não pode estender uma classe, mas pode implementar uma interface, então o melhor que você pode fazer no momento é definir uma interface que inclui o método getFieldName () e ter todas as suas enums implementar essa interface.

No entanto, isto significa que você terá que duplicar a implementação deste método (e quaisquer outros) em todas as suas enums. Há algumas sugestões em esta questão sobre formas de minimizar esta duplicação.

Outras dicas

Todos os enums estender implicitamente java.lang.Enum. Desde Java não suporta herança múltipla, uma enumeração não pode estender qualquer outra coisa.

Enums podem implementar interfaces, mas não se estendem desde quando compilado eles traduzem a um java.lang.Enum.

Abstract enums são potencialmente muito útil (e atualmente não é permitido). Mas uma proposta e protótipo existe se você gostaria de átrio alguém em Sun para adicioná-lo:

http://freddy33.blogspot.com/ 2007/11 / abstract-enum-ricky-carlson-way.html

Sun RFE:

http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 6570766

Para um retrocesso para os pré-Java 5 dias, dê uma olhada ponto 21, Capítulo 5, Effective Java por Josh Bloch . Ele fala sobre como estender "enumerações", adicionando valores, mas talvez você poderia usar algumas das técnicas para adicionar um novo método?

Ofício da mão do enum em um mecanismo semelhante ao definido no Java eficaz de Josh Bloch.

Gostaria de acrescentar que, se você precisa para "alargar" a enumeração, então talvez uma enumeração não é a construção que são depois. Elas são destinadas a ser estático constantes IMHO.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top