La méthode ordinal()
renvoie l'ordinal d'une instance enum.
Comment puis-je définir l'ordinal pour une enum?
Vous ne pouvez pas le définir. C'est toujours l'ordinal de la définition constante. Voir le documentation pour Enum.ordinal () :
Renvoie l'ordinal de cette constante d'énumération (sa position dans sa déclaration enum, où la constante initiale se voit attribuer un ordinal égal à zéro). La plupart des programmeurs n'auront aucune utilité pour cette méthode. Il est conçu pour être utilisé par des structures de données sophistiquées telles que EnumSet et EnumMap.
Et en fait - vous ne devriez pas avoir besoin de. Si vous voulez une propriété entière, définissez-en une.
Vous pouvez contrôler l'ordinal en modifiant l'ordre de l'énum, mais vous ne pouvez pas le définir explicitement comme dans C++
. Une solution de contournement consiste à fournir une méthode supplémentaire dans votre enum pour le nombre souhaité:
enum Foo {
BAR(3),
BAZ(5);
private final int val;
private Foo(int v) { val = v; }
public int getVal() { return val; }
}
Dans cette situation, BAR.ordinal() == 0
, mais BAR.getVal() == 3
.
Vous pouvez mettre à jour l'ordinal en utilisant la réflexion:
private void setEnumOrdinal(Enum object, int ordinal) {
Field field;
try {
field = object.getClass().getSuperclass().getDeclaredField("ordinal");
field.setAccessible(true);
field.set(object, ordinal);
} catch (Exception ex) {
throw new RuntimeException("Can't update enum ordinal: " + ex);
}
}
Comme le souligne la réponse acceptée, vous ne pouvez pas définir l'ordinal. Le plus proche que vous pouvez obtenir c'est avec ne propriété personnalisée:
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;
}
}
Remarque : Par défaut, les valeurs de enum
commencent à 0
(ne pas 1
) si vous ne spécifiez pas de valeurs. De plus, les valeurs ne doivent pas être incrémentées de 1
pour chaque article.
De http://download.Oracle.com/javase/1.5.0/docs/api/Java/lang/Enum.html
public final int ordinal () Retourne l'ordinal de cette constante d'énumération (sa position dans sa déclaration enum, où la constante initiale est affectée à un ordinal de zéro). La plupart des programmeurs n'auront aucune utilité pour cette méthode. Il est conçu pour être utilisé par des structures de données sophistiquées telles que EnumSet et EnumMap.
Returns: l'ordinal de cette constante d'énumération
Si tu as
journée publique {DIMANCHE, LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI}
alors DIMANCHE a un ordinal de 0, LUNDI est de 1, et ainsi de suite ...
Découvrez les Java exemples énumérés et docs
Renvoie l'ordinal de cette constante d'énumération (sa position dans sa déclaration enum, où la constante initiale se voit attribuer un ordinal égal à zéro). La plupart des programmeurs n'auront aucune utilité pour cette méthode. Il est conçu pour être utilisé par des structures de données sophistiquées telles que EnumSet et EnumMap.