comer
los ordinal()
El método devuelve el ordinal de una instancia de enumeración.
¿Cómo puedo establecer el ordinal para una enumeración?
Mate
Puede controlar el ordinal cambiando el orden de la enumeración, pero no puede configurarlo explícitamente como en C++
. Una solución es proporcionar un método adicional en su enumeración para el número que desea:
enum Foo {
BAR(3),
BAZ(5);
private final int val;
private Foo(int v) { val = v; }
public int getVal() { return val; }
}
En esta situación BAR.ordinal() == 0
pero BAR.getVal() == 3
.
-
+1 excepto que esto no es una solución, de verdad. es el comportamiento deseado. el valor ordinal se considera un artefacto de implementación; si desea asignar un número entero u otro valor, eso es lo que “las enumeraciones son clases” es tan bueno …
– andersoj
21 de marzo de 2011 a las 1:43
-
no BAR.ordinal () devuelve 0 afaik los índices de enumeración están basados en cero
– Terraego
10 de marzo de 2012 a las 14:59
Bozho
No puedes configurarlo. Siempre es el ordinal de la definición constante. Ver el documentación para Enum.ordinal():
Devuelve el ordinal de esta constante de enumeración (su posición en su declaración de enumeración, donde a la constante inicial se le asigna un ordinal de cero). La mayoría de los programadores no tendrán ningún uso para este método. Está diseñado para ser utilizado por estructuras de datos sofisticadas basadas en enumeraciones, como EnumSet y EnumMap.
Y en realidad, no deberías necesitarlo. Si desea alguna propiedad entera, defina una.
-
Si puedo especificar el ordinal de enumeración, cuando use JPA con enumeración, será más seguro…
– Cocinar
21 de marzo de 2011 a las 14:18
balbucear
Como señala la respuesta aceptada, no puede establecer el ordinal. Lo más cerca que puedes llegar a esto es con una propiedad personalizada:
public enum MonthEnum {
JANUARY(1),
FEBRUARY(2),
MARCH(3),
APRIL(4),
MAY(5),
JUNE(6),
JULY(7),
AUGUST(8),
SEPTEMBER(9),
OCTOBER(10),
NOVEMBER(11),
DECEMBER(12);
MonthEnum(int monthOfYear) {
this.monthOfYear = monthOfYear;
}
private int monthOfYear;
public int asMonthOfYear() {
return monthOfYear;
}
}
Nota: Por defecto, enum
valores comienzan en 0
(no 1
) si no especifica valores. Además, los valores no tienen que incrementarse en 1
para cada artículo.
De http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html
public final int ordinal() Devuelve el ordinal de esta constante de enumeración (su posición en su declaración de enumeración, donde a la constante inicial se le asigna un ordinal de cero). La mayoría de los programadores no tendrán ningún uso para este método. Está diseñado para ser utilizado por estructuras de datos sofisticadas basadas en enumeraciones, como EnumSet y EnumMap.
Devuelve: el ordinal de esta constante de enumeración
Si usted tiene
public enum Día { DOMINGO, LUNES, MARTES, MIÉRCOLES, JUEVES, VIERNES, SÁBADO }
entonces el DOMINGO tiene un ordinal de 0, el LUNES es 1, y así sucesivamente…
-
Si está dispuesto a hacer esto, también podría reordenar los campos de enumeración. Es más fácil, más seguro y más legible.
– gili
1 de febrero de 2019 a las 21:32
Echa un vistazo a Java Ejemplos de enumeración y documentos
Devuelve el ordinal de esta constante de enumeración (su posición en su declaración de enumeración, donde a la constante inicial se le asigna un ordinal de cero). La mayoría de los programadores no tendrán ningún uso para este método. Está diseñado para ser utilizado por estructuras de datos sofisticadas basadas en enumeraciones, como EnumSet y EnumMap.
donnyton
La respuesta fácil: simplemente cambie el orden de las constantes. El primero definido será 0, el segundo será 1, etc. Sin embargo, esto puede no ser práctico si tiene un código que cambia constantemente o las enumeraciones tendrán muchos valores. Puede definir un método personalizado para evitar el ordinal predeterminado, ¡pero ASEGÚRESE de que esté bien documentado para evitar confusiones!
public enum Values
{
ONE, TWO, THREE, FOUR;
public int getCustomOrdinal()
{
if(this == ONE)
{
return 3;
}
else if(this == TWO)
{
return 0;
}
...
}
}