2012-06-14 13 views
5

entiendo que puedo crear una enumeración de esta manera:¿Puede una Java Enum tener más de un constructor?

public enum MyEnum { 
    ONE(1), 
    TWO(2); 
    private int value; 
    private MyEnum(int value) { 
     this.value = value); 
    } 
    public int getValue() { 
     return value; 
    } 
} 

pero tengo algunas preguntas:

1) Parece que los valores de enumeración se declaran al principio. ¿Hay un formato particular para esto? ¿Podría declararlos en cualquier lugar?

2) ¿Es posible declarar una enumeración con más de un constructor y esto es algo que la gente hace a veces?

+0

¿Se desea compartir cómo quiere usted usarlo? –

+1

Me pregunto por qué no lo intentaste 2) primero? –

+0

Incluso puede [sobrecargar constructores] (http://stackoverflow.com/q/6870710/1064325). – falsarella

Respuesta

5
public enum MyEnum { 
    ONE(1), 
    TWO(1, 2); 
    private int value1, value2; 

    private MyEnum(int value) { 
     this.value1 = value; 
     this.value2 = 0; // default 
     // this.value2 = getFromSomewhereElse(); // get it at runtime 
    } 

    private MyEnum(int value1, int value2) { 
     this.value1 = value1; 
     this.value2 = value2; 
    } 

    public int getValue1() { 
     return this.value1; 
    } 

    public int getValue2() { 
     return this.value2; 
    } 
} 
  1. Sí, debe declarar los valores de enumeración en la salida. Siempre.
  2. Ver el código de arriba. Es posible. Si la gente lo hace, depende de la aplicación. Si tiene muchos campos y la mayoría de ellos debe ser un valor predeterminado, es una buena idea usar múltiples constructores. Además, los valores de los campos podrían leerse en tiempo de ejecución (desde un archivo u otra clase estática).
8
  1. Sí, deben declararse antes que otros campos de la clase enum.
  2. Sí, pueden tener más de un constructor.

Usted podría haberlo descubierto intentándolo usted mismo.

+0

Lo sé, ¿cuánto tiempo podría tomar? Sin embargo, ahora está aquí para cuando otros lo busquen. Estoy más interesado en qué casos sería útil –

+0

Una enumeración es una clase. Si has entendido por qué varios constructores pueden ser útiles para una clase, también has entendido por qué podrían ser para una enumeración: por las mismas razones. –

+0

Enum es un tipo especial de clase. Solo mostrar un ejemplo sería un comentario mucho más útil que implicar que no entiendo sobrecargar constructores. De su comentario, creo que el ejemplo sería el incumplimiento de algunos campos, que es el uso más común para la sobrecarga de los constructores que conozco ... –

3
  1. Según JLS 7, las constantes de ir primero.

  2. "Cualquier constructor o declaraciones miembro dentro de una declaración enum se aplican al tipo enum exactamente como si hubieran estado presentes en el cuerpo de clase de una declaración de clase normal, a menos que se indique explícitamente lo contrario." y "Es un error en tiempo de compilación si una declaración del constructor de un tipo enum es pública o está protegida". (Ibíd., 8.9.2)

Cuestiones relacionadas