2008-10-21 10 views
7

¿Hay alguna manera de escribir una enumeración que se puede extender? Tengo varios métodos que me gustaría tener siempre disponibles para mis enumeraciones. Por ejemplo, uso una enumeración para mis campos de base de datos. Incluyo el nombre del campo real en la base de datos.enumeración extensible de Java

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

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

      public String getFieldName() 
       { 
        return FieldName; 
       } 
     } 

Respuesta

10

Si he entendido bien, lo que desea hacer es algo como esto:

public abstract class DatabaseField { 
    private String fieldName; 

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

    public String getFieldName() { 
     return fieldName; 
    } 
} 

A continuación, defina su enumeración de extender esta clase. Sin embargo, desafortunadamente una enumeración no puede extender una clase, pero puede implementar una interfaz, así que lo mejor que puede hacer en este momento es definir una interfaz que incluya el método getFieldName() y que todas sus enumeraciones implementen esta interfaz.

Sin embargo, esto significa que tendrá que duplicar la implementación de este método (y cualquier otro) en todas sus enumeraciones. Hay algunas sugerencias en this question sobre formas de minimizar esta duplicación.

16

Todas las enumeraciones se extienden de forma implícita java.lang.Enum. Como Java no es compatible con herencia múltiple, una enumeración no puede ampliar nada más.

6

Los enumerados pueden implementar interfaces pero no se extienden, ya que cuando se compilan se traducen a java.lang.Enum.

+0

Creo que es el diseño más sensato aquí, ¿verdad? Si una enumera implementa la interfaz correcta, entonces sabrá que es una enumeración de campos de base de datos. –

0

Para un retroceso a los 5 días previos a Java, eche un vistazo a Item 21, Chapter 5,Effective Java by Josh Bloch. Habla de extender las "enumeraciones" al agregar valores, pero quizás podrías usar algunas de las técnicas para agregar un nuevo método.

0

Manos artesanas la enumeración de un mecanismo similar al eso definido en Java efectivo de Josh Bloch.

Yo agregaría que si necesita "extender" la enumeración, entonces tal vez una enumeración no es la construcción que está buscando. Se supone que son constantes estáticas en mi humilde opinión.

Cuestiones relacionadas