Estoy leyendo un libro sobre programación y me encontré con algo así:
public static enum Month { JANUARY(1), FEBRUARY(2), MARCH(3), APRIL(4), MAY(5), JUNE(6), JULY(7), AUGUST(8), SEPTEMBER(9), OCTOBER(10), NOVEMBER(11), DECEMBER(12); Month(int index) { this.index = index; }¿Qué significa un número entre paréntesis después de una instancia de enumeración? ¿Es un constructor de enumeración?
¿Qué significa un número entre paréntesis después de una instancia de enumeración? ¿Es un constructor de enumeración?
JANUARY(1) , FEBRUARY(2) , etc... son de hecho constructores de enumeración.
Pero no es necesario un número para especificar un constructor en una enumeración. Aquí tiene un número, pero podría ser cualquier otra cosa y también podría tener tantos argumentos como sea necesario.
Tenga en cuenta que, en realidad, la declaración de enumeración pierde el campo index y no se pudo compilar.
Sería correcto:
public static enum Month { JANUARY(1), FEBRUARY(2), MARCH(3), APRIL(4), MAY(5), JUNE(6), JULY(7), AUGUST(8), SEPTEMBER(9), OCTOBER(10), NOVEMBER(11), DECEMBER(12); private int index; Month(int index) { this.index = index; } } Agregaría que una enumeración es sobre todo una clase. Entonces, cada valor de enumeración (aquí JANUARY , FEBRUARY , ...) se instanciará invocando el constructor de clase.
Y como para cualquier clase, como no define un constructor, el compilador generará un valor predeterminado sin argumento.
Entonces es válido:
public static enum Fruit { APPLE(), ORANGE(); Fruit() { } }Eso también es válido:
public static enum Fruit { APPLE(), ORANGE(); }Pero para enumeraciones sin argumentos en el constructor, generalmente usamos esta conveniente sintaxis reservada para enumeraciones:
public static enum Fruit { APPLE, // with no parenthesis ORANGE; // with no parenthesis }Este es el constructor invocado por cada valor de enumeración:
Month(int index) { this.index = index; }